我有以下课程:
@SuperBuilder(toBuilder = true)
public abstract class Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child extends Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child2 extends Parent {
//...
}
Run Code Online (Sandbox Code Playgroud)
为什么我无法调用toBuilder()抽象类 ( ) 的实例Parent,如以下代码所示?
public copy(Parent parent) {
parent.toBuilder().build();
}
Run Code Online (Sandbox Code Playgroud)
Jan*_*eke 10
事实上,正如Hossein Nasr 已经解释的那样,Lombok 无法知道是否存在没有的子类toBuilder=true。
Lombok 可能需要toBuilder通过在抽象类上添加abstract toBuilder()方法来使用抽象类的所有直接子类。然而,可能存在子类不应该有 a 的用例toBuilder(尽管我还没有看到任何好的例子)。此外,间接子类可能仍然缺乏该toBuilder功能。因此,lombok 不强制toBuilder抽象类的子类。
abstract toBuilder()好消息是,您可以通过手动添加该方法来轻松解决您的情况(仅限直接子类)abstract class Parent:
@SuperBuilder(toBuilder = true)
public abstract class Parent {
public abstract ParentBuilder<?, ?> toBuilder();
}
Run Code Online (Sandbox Code Playgroud)
通过此更改,您的copy方法将按预期进行编译和工作。
如果你也有间接子类,你必须找到其他方法来确保它们也有@SuperBuilder(toBuilder = true). 如果那些没有此注释,您可能会遇到奇怪的行为(例如,调用copy()将实例化不同的类)。
免责声明:我实现了该@SuperBuilder功能。
| 归档时间: |
|
| 查看次数: |
6488 次 |
| 最近记录: |