On Fri, Oct 25, 2013 at 12:36 PM, Jörg Schaible
<joerg.schai...@scalaris.com> wrote:
> Hi Damjan,
>
> Damjan Jovanovic wrote:
>
> [snip]
>
> Thanks for explanation.
>
>> We would be able to adapt that for Java < 1.7 by swallowing the close
>> exception instead of calling addSuppressed() on the primary exception,
>> but the show stopper is catching and rethrowing the primary exception
>> (Throwable), which javac < 1.7 refuses to compile because it doesn't
>> do "Rethrowing Exceptions with More Inclusive Type Checking"
>> (http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html).
>>
>> But this would work and always sets succeeded correctly without
>> catch/re-throw:
>>
>> final InputStream is = factoryMethodThatCanThrow();
>> boolean succeeded = false;
>> try {
>>     try {
>>         is.methodThatCanThrow();
>>     } finally {
>>     }
>>     succeeded = true;
>> } finally {
>>     closeSafely(!succeeded, is);
>> }
>
> I guess the nested try was unintentionally ;-)
>
> Cheers,
> Jörg

Well that actually won't work, because the "succeeded = true;" will be
skipped if there is a "return;" in the inner try.

Other than a custom Java compiler, I guess there's no clean way of
doing this in Java < 1.7. There's really only option 2 - with being
careful to always set succeeded correctly on all paths out of the try
block. Almost like releasing memory in C.

Damjan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to