Я только что внес небольшое изменение в код, чтобы отключить предупреждение FindBugs, которое требовало переноса некоторого кода в анонимный внутренний класс. Чтобы получить доступ к некоторым переменным, мне пришлось объявить их как final
. Итак, это фрагмент кода после изменения:
final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
libPath = pathToFiles(libraryPath);
} else {
libPath = new File[0];
}
Он отлично компилируется с языком, установленным на Java 6 в текущем Eclipse (версия 3.7.1). Однако я совершенно уверен, что в какой-то предыдущей версии это приводило к ошибке. Кажется, компилятор принимает эту конструкцию, когда он может определить, что она будет.
У меня вопрос: законно ли это в Java 6 или это что-то, что теперь работает из-за побочного эффекта поддержки Java 7, добавленной в eclipse 3.7.1? Мы видели такие побочные эффекты при использовании некоторых универсальных шаблонов, которые работают в 3.7.1, но не компилируются в 3.7.0.