Просто попробуйте на практике 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
.