У меня есть этот код:
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i);
}
});
}
Он явно не компилируется, потому что i
должен быть окончательным, чтобы использоваться в анонимном классе. Но я не могу сделать это окончательным, потому что это не так. Что бы вы сделали? Решение должно дублировать его, но я думал, что может быть лучший способ:
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);
}
});
}
РЕДАКТИРОВАТЬ, чтобы это было ясно, я использовал Runnable здесь для примера, вопрос действительно об анонимных классах, что может быть чем-то еще.