TIntArrayList list = new TIntArrayList();
final TIntArrayList tempList = new TIntArrayList();
list.add(10086);
list.add(12345);
list.add(1989);
list.forEach(new TIntProcedure() {
@Override
public boolean execute(int i) {
if (i > 10086) {
tempList.add(i);
}
return true;
}
});
Я использую intellij, и он предлагает мне объявить tempList окончательным, почему tempList должен быть объявлен окончательным?Почему список должен быть объявлен окончательным
Ну, просто потому, что язык требует этого. Я думаю, что это потому, что (оригинальные) авторы языка сделали ошибку - окончательное здесь на самом деле мало что значит, кроме как напоминать вам ссылку со стороны внутреннего класса. Но вы должны использовать final или внутренний класс не может использовать ссылку. – markspace
Начиная с Java 8, он фактически не должен быть объявлен окончательным, хотя он должен быть «эффективным» окончательным. –
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html – etherous