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