PROPOSAL: Unchecked Exceptions as Subclasses of Checked Exceptions

Joe Darcy Joe.Darcy at Sun.COM
Tue May 12 17:47:04 PDT 2009


Catching up on proposal email, I agree with the observation from Reinier 
Zwitserloot that there would be adverse behavioral compatibility 
consequences for this change since a common idiom for checking for a 
throwable that was not a checked exception would fail.

Additionally, I don't find the motivating example very compelling.

Regards,

-Joe

Alan Snyder wrote:
> Unchecked Exceptions as Subclasses of Checked Exceptions
> 
> 
> AUTHOR: Alan Snyder
> 
> OVERVIEW
> 
> FEATURE SUMMARY:
> 
> This proposal would allow the definition of an unchecked exception class
> that extends a checked exception class.
> 
> MAJOR ADVANTAGE:
> 
> Unchecked exception classes are useful when an exception must be thrown
> through an existing interface
> that does not declare any checked exceptions or an appropriate checked
> exception.
> If one can define both an unchecked exception class and a
> corresponding checked exception class such that the unchecked exception
> class extends the checked exception class,
> then the unchecked exception will be caught by a try statement that
> catches the checked exception.
> 
> MAJOR BENEFIT:
> 
> Programs do not have to explictly catch both the unchecked and checked
> exceptions. Most developers need
> only be aware of the checked exception.
> 
> MAJOR DISADVANTAGE:
> 
> A new marker interface (or equivalent) must be defined and the definition
> of unchecked exceptions changed.
> 
> ALTERNATIVES:
> 
> The alternative is to always explicitly catch both the unchecked and
> checked exceptions, which introduces
> a likely source of programming errors.
> 
> EXAMPLE:
> 
> This proposal uses a marker interface as an alternative way (besides
> subclassing RuntimeException and Error)
> of indicating that an exception class defines an unchecked exception.
> 
> The following would define a checked exception and an unchecked exception
> that extends the checked exception:
> 
> 	public class TheCheckedException extends Exception {};
> 
> 	public class TheUncheckedException extends TheCheckedException implements
> UncheckedException {};
> 
> There is no advanced usage.
> 
> DETAILS
> 
> SPECIFICATION:
> 
> The JLS would be changed to add one more way to define an unchecked
> exception.
> 
> JLS 11.2
> The unchecked exceptions classes are the class RuntimeException and its
> subclasses, and the class Error and its subclasses.
> All other exception classes are checked exception classes.
> 
> would become
> 
> The unchecked exceptions classes are the class RuntimeException and its
> subclasses, the class Error and its subclasses,
> and those subclasses of Exception that implement the UncheckedException
> interface.
> All other exception classes are checked exception classes.
> 
> JLS 11.5
> The subclasses of Exception other than RuntimeException are all checked
> exception classes.
> 
> would become
> 
> The subclasses of Exception other than RuntimeException are checked
> exception classes, unless they implement the UncheckedException interface.
> 
> The marker interface UncheckedException would have to be defined in some
> java package, with java.lang being the obvious choice.
> 
> COMPILATION:
> 
> The compiler would have to be extended to recognize the new category of
> unchecked exceptions.
> 
> I'm not aware of other changes.
> 
> COMPATIBILITY
> 
> The major compatibility issue arises from the introduction of a new name
> in the class name space. That could potentially cause a program
> to fail to compile if it imported a class with the name UncheckedException
> using a wild card import statement.
> 
> There could also be programs that examine the class hierarchy using
> reflection that would not recognize some exception classes as being
> unchecked.
> 
> 
> 




More information about the coin-dev mailing list