2011-07-12 14 views
6

Duplicar posibles:
Cannot refer to a non-final variable inside an inner class defined in a different method¿Por qué es imposible en java referir una variable no final en una clase anónima interna?

Por qué es imposible en java para referirse variable no final en clase anónima interna? La respuesta simple sería "porque está prohibido", pero me gustaría saber, ¿POR QUÉ prohibieron esta útil funcionalidad? Tal vez haya algún tipo de habilidades de las que carezca Java o estén diseñadas de la manera "incorrecta". Me gustaría saber.

+0

Mira esta publicación, puede ayudar un poco: http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined- in-a-different – mandubian

+1

Respondido aquí: http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different – Jacob

+0

@cularis, lo he revisado, pero debido a ediciones no está claro qué respuesta considerar correcta. – dhblah

Respuesta

3

La razón es que una vez que el método de encerramiento retorna, la variable local ya no existe. Por lo tanto, se crea una copia de la variable cuando se instancia la clase anónima. Si Java permitió que la variable local se cambiara posteriormente, la clase anónima solo conocería el valor anterior.

La forma en que lo hace Java se contrapone al real closures conocido de otros idiomas.

+2

Como yo lo veo, la prohibición existe para mantener la ilusión de que la clase anónima usa la variable directamente en lugar de una copia, y para evitar que las personas tengan falsas expectativas. –

+0

Michael: Exactamente –

+0

Gracias por su respuesta, pero no estoy seguro de que la variable se haya copiado, ya que puede pasar perfectamente la variable final, luego cambiar uno de sus campos dentro del anónimo y ese cambio será visible en el método adjunto. – dhblah

Cuestiones relacionadas