Exception translation
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 = Arrays.asList("up", "down", "strange"); //serialize the List try ( ObjectOutputStream output = new ObjectOutputStream( new FileOutputStream("quarks.ser") ) ){ output.writeObject(quarks); } } }