Java7のtry-with-resourcesはすばらしいものですが、try
ステートメントにリソースの宣言を含める必要がある理由について頭を悩ませることはできません。私の腸は、次のことが可能であるはずだと言っています:
CloseableResource thing;
try (thing = methodThatCreatesAThingAndDoesSomeSideEffect()) {
// do some interesting things
}
thing.collectSomeStats();
残念ながら、これにより構文エラーが発生します(暗号的には;
)。タイプ定義/宣言をtry
ステートメントに移動すると機能します。もちろん、対応するスコープに移動します。閉じられるよりも多くのものが必要な場合に、これを回避する方法を理解できます。コンパイラがこのように要求する理由AutoClosable
に興味があります。