Я просто сделал небольшое изменение кода, чтобы отключить предупреждение 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.