una son que privada otra objeto nombre llevan las internas interna interfaz externa dentro crear clases clase java oop java-ee scjp

java - son - ¿Por qué usamos la palabra clave final con clases internas anónimas?



que es una interfaz interna (2)

El compilador usa trucos sutiles copiando la referencia final bajo las cubiertas para permitir que la clase interna llegue al campo final en la clase externa. La copia es por qué el campo debe ser final, por lo que el valor no cambia.

Ver, por ejemplo, http://tech-read.com/2008/06/19/why-inner-class-can-access-only-final-variable/

Actualmente estoy preparando el S (O) CJP, con el libro Sierra & Bates.

Acerca de las clases internas (método local o anónimo), dicen que no podemos acceder a las variables locales porque viven en la pila mientras la clase vive en el montón y pueden ser devueltas por el método y luego intentan tener acceso a estas variables que están en la pila pero que ya no existen, ya que el método ha terminado ...

Como todos sabemos, podemos omitir esto utilizando la palabra clave final. Esto es lo que dicen en el libro, pero en realidad no explican cuál es el efecto de esa palabra clave final ... Hasta donde sé, usar la palabra clave final en una variable local de método no la hace vivir en el montón. Entonces, ¿cómo podría la clase acceder a una variable final que aún vive en la pila mientras no podría haber más?

Supongo que debería haber algún tipo de "copia" de esta variable local final dentro de la clase interna. Dado que el valor no puede cambiar, ¿por qué no duplicar esta información ... ¿Alguien puede confirmar esto o decirme si me falta algo?


Su intuición es correcta, porque la variable es definitiva, es seguro hacer una copia de la misma. Por supuesto, para los tipos de referencia esto significa copiar la referencia al objeto y no al objeto al que se refiere.