tengo este código:¿Un contador final en un bucle for?
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i);
}
});
}
Obviamente no se compila porque i
tendría que ser final que será utilizada en la clase anónima. Pero no puedo hacerlo definitivo porque no lo es. ¿Qué harías? Una solución es duplicar, pero pensé que podría haber una mejor manera:
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
final int i_final = i;
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i_final);
}
});
}
EDITAR sólo para que quede claro, que utiliza un Ejecutable aquí en aras del ejemplo, la cuestión es realmente sobre el anonimato clases, que podría ser cualquier otra cosa.
No creo que haya una mejor manera ... – thumbmunkeys
Como un contador de bucles por razones obvias nunca puede ser definitivo, creo que su enfoque de copiar el valor en una variable final es el único camino a seguir (pero estoy interesado en alternativas que pueden faltar). – ftr