Записи 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
}
Обратите внимание, что конструктор для .class
file - это именно то, что я ожидал независимо от двух миров. Но дальнейшая попытка создать экземпляр этой записи завершается ошибкой во время компиляции в 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, я попробовал следующие шаги, чтобы решить эту проблему:
- Меня уверили, что это больше похоже на
javac-lombok
взаимодействие и не был подключен к IDE. - Я действительно мог с уверенностью попытаться запустить код, несмотря на выделенную ошибку (которая выглядит как ошибка времени компиляции), и он успешно выполнил печать "14", как и ожидалось.
- Могу подтвердить, что после отключения установленного в IDE "Lombok Plugin" выделенная ошибка исчезает.
Примечание. На втором этапе был установлен плагин. Короче говоря, плагин просто выделяет код, как если бы он не компилировался, но фактическое выполнение выполняется IntelliJ должным образом. (Престижность!)