Acabo de hacer un pequeño cambio de código para silenciar una advertencia de FindBugs que requiere mover algún código a una clase interna anónima. Para acceder a algunas variables, tuve que declararlas como final
. Así que este es el fragmento de código después del cambio:Declarando variables locales como definitivas sin inicializador y asignándolas en if-statement
final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
libPath = pathToFiles(libraryPath);
} else {
libPath = new File[0];
}
Esto compila bien con el lenguaje ajustado a Java 6 en Eclipse actual (versión 3.7.1). Sin embargo, estoy bastante seguro de que esto solía dar un error en alguna versión anterior. Parece que el compilador acepta este constructo cuando puede determinar que lo habrá.
Mi pregunta es: ¿esto es legal en Java 6 o es algo que ahora funciona debido a un efecto secundario del soporte de Java 7 que se está agregando a eclipse 3.7.1? Hemos visto tales efectos secundarios con cierto uso de genéricos que funciona en 3.7.1 pero no compilados en 3.7.0.
De las muchas respuestas correctas que apuntan a la especificación del idioma, aceptaré esta ya que fue la primera en responder. – Axel