Ломбок - возможно, значение не было инициализировано

Я использую Lombok (у меня установлен плагин, и я также перезапустил IDE), однако получаю странную ошибку. Вот мой код:

@RequiredArgsConstructor
@Slf4j
@Service
@Profile("parser")
public class ParserExecutorService implements CommandLineRunner {

    @Value("${input.directory}")
    String inputDirectory;

    @Override
    public void run(String... args) throws Exception {
        getLogFiles();
    }

    public void getLogFiles() {

        File inputDirectory = new File(inputDirectory);

Последняя строка выдает ошибку:

Value 'inputDirectory' might not have been initialized

Однако, когда я предоставляю обычную строку, то есть:

File inputDirectory = new File("c:/temp");

и я печатаю inputDirectory ниже этого, тогда он отображается с правильным значением в консоли.

Итак, с какой стати он выдает эту ошибку при использовании этого свойства?

Я попытался установить его на

private final String inputDirectory;

но и это не помогло.


person randomuser1    schedule 27.12.2020    source источник
comment
Не обращайте внимания на то, что связанный вопрос сообщает об исключении NullPointerException, причина та же, что и в вашем вопросе, и ответы объясняют, почему (и предоставляют решение).   -  person Tom    schedule 27.12.2020


Ответы (1)


К Ломбоку это не имеет никакого отношения.

File inputDirectory = new File(inputDirectory);

Эта строка является ошибкой, как бы вы ее ни нарезали. inputDirectory в new File(inputDirectory) является ссылкой на ту самую переменную inputDirectory, которую вы объявили в этой строке. Который, очевидно, еще не инициализирован.

следовательно, ломбок не имеет к этому отношения.

Исправление? Легко — используйте другое имя, потому что это сбивает с толку. В качестве альтернативы: File inputDirectory = new File(this.inputDirectory); - устранить неоднозначность, убедитесь, что javac понимает, что второе использование inputDirectory относится к полю, тогда как первое относится к «пожалуйста, сделайте мне новую локальную переменную с именем inputDirectory, которая затеняет поле, также называемое inputDirectory».

person rzwitserloot    schedule 27.12.2020