JDK 9 pre-review of JDK-6850612: Deprecate Class.newInstance since it violates the checked exception language contract

joe darcy joe.darcy at oracle.com
Sun Apr 17 17:31:29 UTC 2016


Hello,

With talk of deprecation in the air [1], I thought it would be a fine 
time to examine one of the bugs on my list

     JDK-6850612: Deprecate Class.newInstance since it violates the 
checked exception language contract

As the title of the bug implies, The Class.newInstance method knowingly 
violates the checking exception contract. This has long been documented 
in its specification:

> Note that this method propagates any exception thrown by the nullary 
> constructor, including a checked exception. Use of this method 
> effectively bypasses the compile-time exception checking that would 
> otherwise be performed by the compiler. The Constructor.newInstance 
> method avoids this problem by wrapping any exception thrown by the 
> constructor in a (checked) InvocationTargetException.

Roughly, the fix would be to turn the text of this note into the 
@deprecated text and to add a @Deprecated(since="9") annotation to the 
method. There are a few dozen uses of the method in the JDK that would 
have to be @SuppressWarning-ed or otherwise updated.

Thoughts on the appropriateness of deprecating this method at this time?

Comments on the bug have suggested that besides deprecating the method, 
a new method on Class could be introduced, 
newInstanceWithProperExceptionBehavior, that had the same signature but 
wrapped exceptions thrown by the constructor call in the same way 
Constructor.newInstance does.

Thanks,

-Joe

[1] 
http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-April/040192.html



More information about the core-libs-dev mailing list