try-with-resources and null resource (original) (raw)

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.

  1. try(AutoCloseable c = null) {
  2. // nothing
  3. }

$ 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:

  1. try(InputStream i = null) {
  2.   i.available();
  3. }

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

  1. try(AutoCloseable c = null) {
  2. // nothing
  3. }

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