只是尝试动手 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 中在两种情况下的反射(reflect)方式 - 有和没有
@AllArgsConstructor
.最佳答案
跟进此事并在 IntelliJ 开发人员的在线帮助下,我尝试了以下步骤来解决此问题-
javac-lombok
交互并且未连接到 IDE。 备注 : 第二步是安装插件。简而言之,插件会突出显示代码,好像它不会编译一样,但实际执行由 IntelliJ 正确处理。 (点赞!)
编辑 :与
1.8.20
release , Lombok 可防止 record
用 AllArgsConstructor
注释没有了。您可以访问官方更新日志 here .
关于Java 记录和 Lombok 注释 - IntelliJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60795837/