try-with-resources and null resource

Paul Benedict pbenedict at apache.org
Fri Jan 21 10:24:49 PST 2011


The NPE is more useful than the language silently doing nothing with a null
pointer. While your idea is convenient, I believe it assumes too much. If
anything, perhaps the language shouldn't allow an explicit null assignment
in a try-with-resources block.

On Fri, Jan 21, 2011 at 11:12 AM, Rémi Forax <forax at univ-mlv.fr> wrote:

> 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