当前位置: 首页 > 知识库问答 >
问题:

Lombok@Wither继承(超/子类)

靳富
2023-03-14

请建议应用继承时如何使用@wither

我有一个抽象类父类和具体的子类child应该是不可变的。将@wither放在两者上会导致两个错误:

    null
@Value
@Wither
@NonFinal
@SuperBuilder
abstract class Parent {
    String a;
}

@Value
@Wither
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
class Child extends Parent {
    String b;
}

我很乐意删除@wither并使用构建器方法,但我正在重构一个公共库(试图优化模型类),我不希望在我的客户端上出现编译错误。

我还发现了解释第二个错误的这个问题。但其意图的逻辑并不清楚https://github.com/rzwitserloot/lombok/issues/945

共有1个答案

龙智
2023-03-14

Lombok是一个注释处理器。它们运行在每个编译单元(即Java文件)上,并且不能访问其他编译单元的信息。这意味着Lombok在处理child时无法了解类parent的任何内容。

因此在为child生成代码时,Lombok不知道从parent继承了哪些wither方法。因此,它无法为抽象的生成一个实现,其中包含来自parent的()

第二个问题是wither方法需要一个构造函数,该构造函数将所有字段作为参数,包括超类中的字段。由于上述限制,也不可能为龙目岛生成。

长话短说:@wither不能很好地使用继承。我建议只将其放在上,并为手动实现。

 类似资料:
  • 我试图在不创建任何构造函数的情况下链接几个@Value@非最终类。 期望lombok选择生成一个构造函数,用所有匹配的参数调用super。 有没有办法做到这一点?它似乎出现了一个毫无意义的错误,因为父类有注释给出的构造函数。我用不同文件中的类尝试了这个方法,同样的行为。 例子: 错误:(12,5)java:TestLombok类中的构造函数A。A不能应用于给定的类型;必修课:java。找到整型:无

  • 错误是... 关于继承和@EqualSandHashCode以及Lombok有没有我正在滥用的最佳实践?或者有什么办法?

  • 我在我的多模块maven项目中面临Lombok的问题。我有两个类: 还有一个父maven项目,其中定义了lombok依赖项。还有一个子maven项目,其中我将父项目定义为maven父项目。 当我在 类中使用生成的实例时,会发生编译错误: 我可以通过两种方式解决问题: < li >我自己手工创建了一个名为“log”的私有字段。 < li >我在子maven项目中定义了Lombok依赖项。 为什么这样

  • Lombok@builder不适用于继承用例: 手动创建条形图的构造函数。 将生成器批注放在该构造函数上。 有更好的变通办法吗?

  • 问题内容: 我有一个带有很多参数的基类: 所有继承类都应运行基类的方法。 我可以在每个继承的类中编写一个将调用超类的方法,但这将是严重的代码重复: 自动调用超类的最Pythonic方法是什么? 问题答案: 如果有助于解决您的噩梦,请考虑使用 args和* kw。