Java 记录和 Lombok 注释 - IntelliJ

标签 java intellij-idea intellij-lombok-plugin java-14 java-record

只是尝试动手 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 .

screenshot

最佳答案

跟进此事并在 IntelliJ 开发人员的在线帮助下,我尝试了以下步骤来解决此问题-

  • 我确信它看起来更多关于 javac-lombok交互并且未连接到 IDE。
  • 尽管突出显示了错误(看起来像编译时错误),但我实际上可以获得尝试运行代码的信心,并且它成功执行以打印 "14"正如预期的那样。
  • 我可以在之后确认禁用“Lombok 插件” IDE 中安装,突出显示的错误消失。

  • enter image description here
    备注 : 第二步是安装插件。简而言之,插件会突出显示代码,好像它不会编译一样,但实际执行由 IntelliJ 正确处理。 (点赞!)
    编辑 :与 1.8.20 release , Lombok 可防止 recordAllArgsConstructor 注释没有了。您可以访问官方更新日志 here .

    关于Java 记录和 Lombok 注释 - IntelliJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60795837/

    相关文章:

    java - OData v3 和 OData v4 之间的区别

    java - 无法在 IntelliJ 中使用 jdk 11 进行编译,找不到符号

    android - Lombok val 和 var 不适用于 Android

    Java Lombok "@Getter"不适用于字段

    java - 在 Intellij 中查找 lombok 生成的 getter/setter 的用法

    java - 如何以编程方式查看 android 中 zip 中的内容(无需解压缩)

    java - 如果在提交表单时条件总是路由到 hasError 条件

    java - .NET 到 Java 代码转换

    scala - 在Intellij中找不到Scala库的库源

    java - 如何在Intellij IDEA上导入现有的Maven + Spring MVC + Tomcat项目?