Как я могу получить доступ к нефинальной переменной из анонимного внутреннего класса?

У меня есть 2 класса Java.

  1. TestLogging
  2. Test2

В обоих классах я написал одну и ту же логику. Но в классе TestLogging мне не разрешен доступ к нефинальной переменной в анонимном внутреннем классе.

Но в классе Test2, почему я разрешаю доступ к нефинальной переменной в анонимном внутреннем классе?

TestLogging

Test2

Как можно получить доступ к нефинальной переменной из анонимного внутреннего класса?

Всего 2 ответа


Разница связана с версией JDK, с которой вы компилируете (или целевую версию).

Java 8 понимает «эффективно конечные» переменные. Когда вы компилируете JDK 8, вам не нужно явно объявлять переменную как final , чтобы ссылаться на нее в анонимном классе.

Другими словами, переменная s , хотя и не объявлена ​​как окончательная, не переназначается и делает ее «эффективной окончательной» (для получения дополнительной информации см. Этот ответ ).

Перед тем как Java 8 (и ваш другой проект - TestLogging - имеет целевую версию 1.5), переменные должны быть явно объявлены окончательными


Проверьте конфигурацию maven для версии java введите описание изображения здесь


Есть идеи?

10000