try-with-resources and null resource
Joe Darcy
joe.darcy at oracle.com
Mon Jan 24 11:00:20 PST 2011
On 1/22/2011 5:09 AM, Rémi Forax wrote:
> On 01/21/2011 08:38 PM, Joe Darcy wrote:
>> Rémi Forax 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)
>>
>> I'm not too concerned about that stacktrace since the primary
>> exception points to the right location.
>
> But the suppressed exception occurs in a generated code that the user
> don't write.
But that is the whole point of try-with-resources, to allow users to not
have to write the messy and error-prone clean-up code.
> I don't like the idea that a user mistake blow up in a generated code,
> try-with-resources should protect itself.
I think this stack trace can easily be explained to programmers by
saying "the suppressed exception comes from the close call you did have
to write yourself."
-Joe
More information about the coin-dev
mailing list