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