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