try-with-resources and null resource

Rémi Forax forax at univ-mlv.fr
Fri Jan 21 09:12:53 PST 2011


I think try-with-resources should do a null check before entering in the 
try block.

4. try(AutoCloseable c = null) {
5.     // nothing
6. }

$ java TryWithresourceNPE
Exception in thread "main" java.lang.NullPointerException
     at TryWithresourceNPE.main(TryWithresourceNPE.java:6)

I got a NPE from the ends of the try block, I think it will be better to 
detect the case
before entering in the try block like foreach or switch does.

And with this code:

5. try(InputStream i = null) {
6.       i.available();
7. }

I got the exception below which is not understandable if you don't know
how try-with-resources is translated.

$ java TryWithresourceNPE
Exception in thread "main" java.lang.NullPointerException
     at TryWithresourceNPE.main(TryWithresourceNPE.java:6)
     Suppressed: java.lang.NullPointerException
         at TryWithresourceNPE.main(TryWithresourceNPE.java:7)

If the nullcheck is done before entering in the try block,
the exception will be:
Exception in thread "main" java.lang.NullPointerException
     at TryWithresourceNPE.main(TryWithresourceNPE.java:5)
which is in my opinion much better.

Rémi
PS: the nullcheck can be done easily by calling getClass() on the expression

4. try(AutoCloseable c = null) {
5.     // nothing
6. }

will be translated to

aconst_null
dup
invokevirtual java/lang/Object getClass ()Ljava/lang/Class;
astore local_slot_of_c




More information about the coin-dev mailing list