Why is declaration required in Java's try-with-resource
java, try-catch
Solution
Your version does not clearly define what should be closed, for example
CloseableResource thing;
Parameter a;
try (a = (thing = methodThatCreatesAThingAndDoesSomeSideEffect()).getParameter()) {
also what to do if you write
try (12) {
or something?
ALSO
CloseableResource thing1 = methodThatCreatesAThingAndDoesSomeSideEffect();
CloseableResource thing2 = methodThatCreatesAThingAndDoesSomeSideEffect();
try(thing1) {
}
why only close `thing1`?
So the current syntax force you to create a variable simultaneosly with opening close block.
ALSO2
CloseableResource thing1 = methodThatCreatesAThingAndDoesSomeSideEffect();
try(thing1) {
}
thing1.doSomethingOnClosedResource();
since `thing1` remains.
Problem
Java7's try-with-resources is great and all, but I can't wrap my head around why it is required to include the declaration of the resource in the `try` statement. My gut says the following should be possible: ``` CloseableResource thing; try (thing = methodThatCreatesAThingAndDoesSomeSideEffect()) { // do some interesting things } thing.collectSomeStats(); ``` Alas, this results in a syntax error (cryptically expecting a `;`). Moving the type definition/declaration into the `try` statement works, which of course moves thing into the corresponding scope. I can figure out how to work around this when I want more from my `AutoClosable` than getting closed, I'm interested in why the compiler requires it like this.