Записи Java и аннотация Lombok - IntelliJ

Просто пробую на практике java.lang.Record. Я просмотрел документацию и JEP-359 для некоторого понимания. Итак, прочитав о неявном объявлении конструктора, я подумал о том, чтобы смешать его с существующей библиотекой генерации кода - Lombok!

В качестве минимально воспроизводимого примера я создал эту запись

import lombok.AllArgsConstructor;

@AllArgsConstructor
public record Java(String version) {
}

который при компиляции с использованием IntelliJ успешно создает файл класса, который выглядит как

public final class Java extends java.lang.Record {
    private final java.lang.String version;
    public Java(java.lang.String version) { /* compiled code */ }
    ... rest of the compiled code
} 

Обратите внимание, что конструктор для .classfile - это именно то, что я ожидал независимо от двух миров. Но дальнейшая попытка создать экземпляр этой записи завершается ошибкой во время компиляции в IntelliJ:

public class MixOfWorlds {

    public static void main(String[] args) {
        System.out.println(new Java("14").version()); // cannot resolve constructor
    }
}

Я бы создал еще один более простой пример для выполнения компиляции с javac и исполнение с javaинструменты. Я все еще ищу ответ, если это возможное ожидаемое поведение, которое могло произойти из-за чего-то, что я мог пропустить?

IntelliJ IDEA 2020.1 EAP (Community Edition)
Build #IC-201.6487.11, built on March 18, 2020 
Runtime version: 11.0.6+8-b765.15 x86_64 
macOS 10.14.6

Вот как это отражается в IntelliJ для обоих случаев - с и без @AllArgsConstructor.

Скриншот

1 ответ

Решение

Следуя за этим и с некоторой помощью онлайн от разработчиков IntelliJ, я попробовал следующие шаги, чтобы решить эту проблему:

  1. Меня уверили, что это больше похоже на javac-lombok взаимодействие и не был подключен к IDE.
  2. Я действительно мог с уверенностью попытаться запустить код, несмотря на выделенную ошибку (которая выглядит как ошибка времени компиляции), и он успешно выполнил печать "14", как и ожидалось.
  3. Могу подтвердить, что после отключения установленного в IDE "Lombok Plugin" выделенная ошибка исчезает.

Примечание. На втором этапе был установлен плагин. Короче говоря, плагин просто выделяет код, как если бы он не компилировался, но фактическое выполнение выполняется IntelliJ должным образом. (Престижность!)

Другие вопросы по тегам