Java Записи и аннотация Ломбок - IntelliJ - PullRequest
4 голосов
/ 22 марта 2020

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

screenshot

1 Ответ

4 голосов
/ 23 марта 2020

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

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

enter image description here

Примечание : Второй шаг был с установленным плагином . Короче говоря, просто так получается, что плагин выделяет код, как если бы он не компилировался, но фактическое выполнение обрабатывается IntelliJ должным образом. (Kudos!)

...