try-with-resources and null resource (original) (raw)
Rémi Forax forax at univ-mlv.fr
Fri Jan 21 09:12:53 PST 2011
- Previous message: SafeVarargs classfile encoding
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I think try-with-resources should do a null check before entering in the try block.
- try(AutoCloseable c = null) {
// nothing
- }
$ 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:
- try(InputStream i = null) {
i.available();
- }
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
- try(AutoCloseable c = null) {
// nothing
- }
will be translated to
aconst_null dup invokevirtual java/lang/Object getClass ()Ljava/lang/Class; astore local_slot_of_c
- Previous message: SafeVarargs classfile encoding
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]