Wednesday, February 16, 2011

Be specific in throws clause

In the throws clause of a method header, be as specific as possible. Do not group together related exceptions in a generic exception class - that would represent a loss of possibly important information.
An alternative is the exception translation practice, in which a low level exception is first translated into a higher level exception before being thrown out of the method.
Example
Here, both IOException and FileNotFoundException are incorrectly lumped together as Exception.
import java.io.*;
import java.util.*;
public final class BadGenericThrow {
//..elided
/**
* BAD: This method throws a generic Exception, instead
* of FileNotFoundException and IOException.
*/
public void makeFile() throws Exception {
//create a Serializable List
List<String> quarks = new ArrayList<String>();
quarks.add("up");
quarks.add("down");
quarks.add("strange");
quarks.add("charm");
quarks.add("top");
quarks.add("bottom");
//serialize the List
ObjectOutputStream output  = new ObjectOutputStream(
new FileOutputStream("quarks.ser")
);
try{
output.writeObject(quarks);
}
finally{
//flush and close all streams
output.close();
}
}
} 

See Also :

Exception translation

No comments:

Post a Comment

Chitika