我有一个具有单个抽象基类和几个子类的类层次结构。基类有25个字段,每个子类有一个额外的0-8个字段。
@AllArgsConstructor
@Data
public abstract class Base {
private int b1, b2, ... , b25;
}
public class C1 extends Base {
private int c11, c12, ... , c16;
@Builder
private C1(int b1, int b2, ..., int b25, int c11, ... int c16) {
super(b1, b2, ...., b25);
this.c11 = c11;
...
this.c16 = c16;
}
}
public class C2 extends Base {
@Builder
private C2(int b1, int b2, ..., int b25) {
super(b1, b2, ...., b25);
}
}
C1 c1 = C1.builder().b1(1).b2(2)....b25(25).c11(101).c12(102).build();
C2 c2 = C2.builder().b1(1).b2(2)....b25(25).build();
public void setBValues(BValuesProvider bv, // what else goes here??? //) {
// something.b1(bv.b1()).b2(bv.b2()) ...
}
public createC1(BValuesProvider bv, c11, c12, ..., c16) {
C1.Builder c1b = C1.builder().c11(c11).c12(c12)....c16(c16);
// Call setBValues somehow
return c1b.build();
}
public createC2(BValuesProvider bv) {
// Call setBValues somehow
return c2b.build();
}
public void setBValues(BValuesProvider bv, Base cx) {
cx.setB1(bv.b1());
cx.setB2(bv.b2());
...
cx.setB25(bv.b25());
}
public createC1(BValuesProvider bv, c11, c12, ..., c16) {
C1 c1 = C1.builder().c11(c11).c12(c12)....c16(c16).build();
setBValues(bv, c1);
return c1;
}
public createC2(BValuesProvider bv) {
C2 c2 = C2.builder().build();
setBValues(bv, c2);
return c2;
}
然而,他们没有一个谈到有一个“基构建器”,每个子构建器都是它的一个子类。因此,我无法确定使用泛型,setbvalues
函数的第二个参数应该是什么。
这可以使用(实验性的)@superbuilder
注释和lombok>=1.18.4来实现。您可以自定义base
的@superbuilder
,方法是添加一个方法,该方法将BValuesProvider
作为参数并从中设置所有值:
@SuperBuilder
public abstract class Base {
public static abstract class BaseBuilder<C extends Base, B extends BaseBuilder<C, B>> {
public B fillFromProvider(BValuesProvider bv) {
b1(bv.b1());
b2(bv.b2());
...
return self();
}
}
...
}
那么您可以这样使用它(其中BV
是BValuesProvider
实例):
C1 c1 = C1.builder().fillFromProvider(bv).c11(11).build();
我读过其他关于龙目岛的构建器和继承的问题,但没有一个解决方案奏效。使用Lombok版本1.18.4和Java11。 和实际的实现: 我希望龙目岛 识别父类所需的字段。 在生成的子类生成器中包含这些字段。 问题是,IntelliJ突出显示了注释,并带有以下错误: Lombok需要基类中的默认构造函数。 如果从中删除,则会出现以下错误: 基类中没有可用的默认构造函数。 因此,我从中删除了,并添加了一个
我有一个类的层次结构:是一个基本抽象类
问题内容: 是否可以基于层次结构/ cte创建视图? 我看过一个有关如何基于链接递归查询生成结果集的示例。 我已经附上了ddl和声明。 谢谢你, 埃尔默 问题答案: 后已被指定(超出右括号),您需要选择从CTE的所有值: 这是构成视图的实际选择查询。 这是一个完整的工作示例,其中选择了视图的最终输出,以及一些其他语句,以允许这些语句在SQL Server Management Studio中一次执
使用lombok,我感兴趣的是通过基类实例的构造函数将所有字段复制到派生类,这与C copy构造函数的功能非常相似。目前,人们关注的并不是这本书是深的还是浅的。我有一个基类,如下所示, 我感兴趣的是自动生成一个派生类构造函数,它接受基类实例,并将所有字段(浅或深)复制到派生类。例如 我可以根据需要灵活地注释父类和子类,但是我不想手工创建构造函数,它会逐个复制每个字段。示例用法
解决方案: 我不得不更改我的和的顺序。 我必须将放在之上,然后它就起作用了。 我将下面的pom更新到工作版本,所以这里没有非工作代码。 我还将lombok版本转换回当前版本,而不是使用edge版本。 原始问题: 我有2个或多或少相同的类集(见下面的示例) 一组是我的API的DTO,我希望它是不可变的,使用Lombok的@Value和@Builder 一组是要存储在数据库中的实体。使用Lombok的
问题内容: 从Java 8开始,我知道类加载器的层次结构如下: Bootstrap类加载器→扩展类加载器→应用程序类加载器 Java 9中的类加载器的层次结构发生了什么变化,它如何起作用? 问题答案: 在 Java中,9个州修订如下: Java运行时具有以下内置的类加载器: :虚拟机的内置类加载器通常表示为null,并且没有父级。 :为了允许升级/覆盖定义到平台类加载器的模块,以及允许升级的模块读