Ho appena fatto una piccola modifica al codice per silenziare un avviso FindBugs che richiedeva lo spostamento di un codice in una classe interna anonima. Per accedere ad alcune variabili, ho dovuto dichiararle come final
. Quindi questo è il frammento di codice dopo il cambio:Dichiarare le variabili locali come definitive senza inizializzatore e assegnando in if-statement
final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
libPath = pathToFiles(libraryPath);
} else {
libPath = new File[0];
}
Questo compila bene con la lingua impostata su Java 6 in Eclipse corrente (versione 3.7.1). Tuttavia sono abbastanza sicuro che questo ha dato un errore in alcune versioni precedenti. Sembra che il compilatore accetti questo costrutto quando può determinare che ci sarà.
La mia domanda è: questo è legale in Java 6 o è qualcosa che ora funziona a causa di un effetto collaterale del supporto Java 7 che viene aggiunto a Eclipse 3.7.1? Abbiamo visto tali effetti collaterali con un certo uso di generici che funzionano in 3.7.1 ma non sono stati compilati in 3.7.0.
Dalle molte risposte corrette che indicano le specifiche della lingua, accetterò questo dato che tu eri il primo a rispondere. – Axel