请建议在应用继承时如何使用@Wither
。
我有一个抽象类Parent
和具体的Child
。 Child
应该是不变的。在两者上都放@Wither
会给我两个错误:
@Value
@Wither
@NonFinal
@SuperBuilder
abstract class Parent {
String a;
}
@Value
@Wither
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
class Child extends Parent {
String b;
}
我很乐意删除@Wither
并使用builder方法,但是我正在重构公共库(试图优化模型类),并且我不希望客户端出现编译错误。
我还发现了解释第二个错误的问题。但是意图的逻辑尚不清楚https://github.com/rzwitserloot/lombok/issues/945
答案 0 :(得分:2)
Lombok是注释处理器。那些在每个编译单元(即Java文件)上运行,并且无法访问其他编译单元的信息。这意味着Lombok在处理Parent
时对类Child
的内容一无所知。
因此,在为Child
生成代码时,Lombok不知道从Parent
继承了什么凋谢方法。因此,它无法为withA()
中的抽象Parent
生成实现。
第二个问题是,凋灵方法需要一个以所有字段为参数的构造函数,包括来自超类的字段。由于上述限制,对于龙目岛来说这也是不可能的。
长话短说:@Wither
在继承方面效果不佳。我建议仅将其放在Parent
上,并手动为Child
实施。