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.
Your version does not clearly define what should be closed, for example
also what to do if you write
or something?
ALSO
why only close
thing1?So the current syntax force you to create a variable simultaneosly with opening close block.
ALSO2
CloseableResource thing1 = methodThatCreatesAThingAndDoesSomeSideEffect();
since
thing1remains.