2012-05-20 13 views
6

Método: la clase interna local no puede acceder a las variables locales porque la instancia de la clase interna local del método puede seguir activa después de que el método haya finalizado. Pero las variables locales desaparecerán una vez que el método local haya terminado. Me enteré de que la clase interna local del método puede acceder a la variable local final, ¿significa esto que la variable local final sigue viva después de que el método ha terminado?Alcance de la variable local final en java

+3

¿Desea publicar su ejemplo para que nadie malinterprete su pregunta accidentalmente? Somos codificadores, y el código de Java daría mucha más claridad. – jmort253

+0

Creo que esto es lo que quieres decir, y _no_ no funciona. http://ideone.com/LNg9w –

+0

@HunterMcMillen La pregunta es acerca de las clases de método local, no de otros métodos. – Jeffrey

Respuesta

7

Tipo de. Las clases internas anónimas de Java actúan como "cierres", es decir, "cierran" alrededor del estado local actual. Sin embargo, Java solo permite que estas clases se cierren alrededor de las variables finales. Si no fuera así, el estado local de la variable podría cambiar, pero la versión de la clase interna no lo haría, por lo que accedería a una instancia "desactualizada". Esto podría ser confuso para un programador.

En su lugar, Java requiere que la instancia maneje la mutabilidad mediante métodos, no con la reasignación de variables. Esto conduce a una mayor claridad y permite una depuración más simple. Para obtener más información acerca de por qué Java hace esto, consulte this answer.

Dado que la clase todavía contiene una referencia a la variable, la respuesta a su pregunta es , esa instancia no será basura hasta que la clase interna renuncie a la propiedad de la variable.

+1

* "Esto podría ser confuso para un programador." * - Más al punto, ya no sería "como" un cierre. Tendría un nombre de identificador que tiene un enlace observablemente diferente, según el contexto léxico. –

+0

@Stephen Bastante, y un buen punto. –

1

No, no lo hace. Significa que una copia de la variable local aún está activa, en la instancia de clase interna. El 'final' solo asegura que las dos copias no divergen confusamente en valor.