Le risorse di prova di Java7 sono grandiose e tutte, ma non riesco a capire perché è necessario includere la dichiarazione della risorsa nell'istruzione try
. Il mio istinto dice il seguente dovrebbe essere possibile:Perché è richiesta la dichiarazione nella risorsa di prova di Java
CloseableResource thing;
try (thing = methodThatCreatesAThingAndDoesSomeSideEffect()) {
// do some interesting things
}
thing.collectSomeStats();
Ahimè, questo si traduce in un errore di sintassi (cripticamente in attesa di un ;
). Lo spostamento della definizione/dichiarazione del tipo nell'istruzione try
funziona, il che ovviamente sposta la cosa nello scope corrispondente. Posso capire come ovviare a questo quando desidero di più dal mio AutoClosable
che rimanere chiuso, sono interessato a perché il il compilatore lo richiede in questo modo.
A partire da Java 9 è sufficiente se si tratta di un'espressione che indica un riferimento a una variabile finale o effettivamente finale. Aggiornamento – aioobe
JDK - https://bugs.openjdk.java.net/browse/JDK-7196163 –