【问题标题】:Java Records and Lombok annotation - IntelliJJava 记录和 Lombok 注释 - IntelliJ
【发布时间】:2020-07-02 20:52:57
【问题描述】:

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

【问题讨论】:

  • 足够的代码重现@AllArgsConstructor public record Java(String version, boolean preview) { public Java(String version) { this(version, true); } }
  • Lombok 尚不支持记录,但已计划:github.com/rzwitserloot/lombok/issues/2356。在那之前,奇怪的事情可能会发生。
  • 顺便说一句:你到底想达到什么目的?记录上的AllArgsConstructor 没有意义,因为 javac 无论如何都会生成一个。
  • @JanRieke 并没有真正尝试从共享代码中实现任何目标,它纯粹是实验性的,问题在于使用适当的构造函数生成的 .class 仍然无法创建一样的。

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


【解决方案1】:

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

  1. 我确信它看起来更像是 javac-lombok 交互,并且没有连接到 IDE。
  2. 尽管有突出显示的错误(看起来像编译时错误),但我实际上可以有信心尝试运行代码,并且它成功执行并按预期打印 "14"
  3. 我可以确认,禁用 IDE 中安装的“Lombok 插件”后,突出显示的错误消失了。

注意:第二步是安装插件。所以简而言之,插件会突出显示代码,就好像它不会编译一样,但实际的执行是由 IntelliJ 正确处理的。 (赞!)

编辑:使用1.8.20 release,Lombok 可以防止record 再被AllArgsConstructor 注释。您可以访问官方更新日志here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多