Próbki z zasobami Java7 są świetne i wszystkie, ale nie mogę sobie wyobrazić, dlaczego wymagane jest zawarcie deklaracji zasobu w oświadczeniu try
. Mój gut mówi następujące dokumenty powinny być możliwe:Dlaczego deklaracja jest wymagana w próbie Javy przy próbie zasobu
CloseableResource thing;
try (thing = methodThatCreatesAThingAndDoesSomeSideEffect()) {
// do some interesting things
}
thing.collectSomeStats();
Niestety, powoduje to błąd składni (tajemniczo spodziewa się ;
). Przenoszenie definicji/deklaracji typu do instrukcji try
działa, co oczywiście przenosi rzecz do odpowiedniego zakresu. Mogę wymyślić, jak obejść to, gdy chcę więcej z mojego AutoClosable
niż zamykanie, interesuje mnie , dlaczego kompilator wymaga tego w ten sposób.
Od wersji Java 9 wystarczy, jeśli jest to wyrażenie oznaczające odniesienie do ostatecznej lub efektywnej zmiennej końcowej. – aioobe
Aktualizacja JDK - https://bugs.openjdk.java.net/browse/JDK-7196163 –