Java - Problemilla técnico.

   
Vista:

Problemilla técnico.

Publicado por Jordi jordidalmaucolell2@hotmail.com (127 intervenciones) el 31/05/2017 22:45:03
Esto no funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args){
int a;
ActionListener al = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
a = 1;
System.out.println(a);
 
}
 
}
 
}
¿Alguien sabe el motivo de que no pueda leerse la variable dentro del bloque?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemilla técnico.

Publicado por Tom (1145 intervenciones) el 01/06/2017 08:42:02
Pues tienes, con toda seguridad, un bonito mensaje de error que te lo indica claramente:
La variable a debe ser declarada final.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemilla técnico.

Publicado por Jordi jordidalmaucolell2@hotmail.com (127 intervenciones) el 01/06/2017 09:58:04
Pero, porqué tiene que ser final? Eso es lo que no entiendo :'(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemilla técnico.

Publicado por Tom (1145 intervenciones) el 01/06/2017 15:56:41
Pues seguramente estará descrito por alguna parte en la doc. de java.
Simplemente, cuando creas una inner class anónima (tu ActionListener()) y haces referencia a variables locales del método que la engloba, lo que tiene que hacer el compilador es crear una nueva copia de dicha variable que se usará dentro de tu inner class.
Ya que esa copia solo es visible en la inner class, cualquier cambio sobre ella no afectaría a la variable "real" definida en el ámbito superior. Para evitar este problema, y alguno más, el compilador genera un error y listo!

http://blog.brendanlacanette.com/2015/08/variable-is-accessed-within-inner-class.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problemilla técnico.

Publicado por Jordi jordidalmaucolell2@hotmail.com (127 intervenciones) el 01/06/2017 16:29:32
<3 muchas gracias !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar