【问题标题】:Lombok's @SuperBuilder - Error java: cannot find symbol龙目岛的@SuperBuilder - 错误java:找不到符号
【发布时间】:2020-01-07 10:41:23
【问题描述】:

我在 IntelliJ 中使用 Lombok 已经有一段时间了。我已经安装了最新的 (v. 0.28) Lombok 插件,启用了注释处理并在 pom.xml 中添加了 Lombok 依赖项 (v. 1.18.10)。直到今天,这一切都运行良好,当时我想实现实验性 @SuperBuilder

我有一个简单的层次结构:

@SuperBuilder
public class User {
   private String a;
}

@SuperBuilder
public class Employee extends User {
   private int b;
}

@SuperBuilder
public class Employer extends User {
   private double c;
}

我想在子构建器中设置父类的字段,例如:

Employee.builder().a("Positive").b(1).build();

Employer.builder().a("Negative").c(-2.1).build();

乍一看似乎一切正常 - 打开文件并且构建器正常时没有显示错误。但是,在 mvn clean compile 之后,我在每个 @SuperBuilder 行(即在这 3 个类中的每一个中)都会得到以下结果: Error:(20) java: cannot find symbol

我在这里缺少什么?我尝试更新 Lombok 插件版本并重新安装它,但没有任何成功。

【问题讨论】:

  • 鉴于信息量很大,不确定这里还有多少人能够回答。如果错误是“找不到符号”,那么编译器甚至看不到注释。这是一个依赖问题,与 Lombok 无关。
  • 但是您如何解释访问反编译的 SuperBuilder.class 文件的能力?这一切似乎都在那里
  • 这意味着 IntelliJ 能够定位依赖关系,但它不能通过与 Maven 相同的机制工作。
  • 你的 pom.xml 可能有问题。您能否添加相关部分(对 Lombok 的依赖)?
  • 看起来是正确的。那个编译器错误还有什么?仅仅因为它在@SuperBuilder这一行并不意味着它找不到注解。它也可能是生成代码中的另一个符号。

标签: java intellij-idea lombok


【解决方案1】:

我遇到了同样的问题,添加 @SuperBuilder 到所有“基础”类解决了这个问题。

之前:

abstract class Parent {
   ...
}

@SuperBuilder
class Child extends Parent {
   ...
}

之后:

@SuperBuilder              // <- addded
abstract class Parent {
   ...
}

@SuperBuilder
class Child extends Parent {
   ...
}

【讨论】:

  • 谢谢!解决它。你能解释一下原因吗?
【解决方案2】:

好的,我找到了。我错过了 User 类正在扩展我们应用程序中的每个实体都扩展的基本类。这看起来很明显,但我没有注意到......

无论如何,我只是通过在终端中运行 mvn clean install 才发现的——输出比 IntelliJ 中的输出要详细得多,并且它指出了这个类。在上面添加 @SuperBuilder 注释后编译成功。

但是 @SuperBuilder(toBuilder=true) 是正确的使用方式。

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2013-05-20
    • 2013-12-06
    • 2016-07-22
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多