Объявление локальных переменных как final без инициализатора и присвоение в операторе if

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

14
задан palacsint 1 August 2014 в 14:32
поделиться