我正在尝试使用Lombok的@with
注释设置克隆,但我遇到了一个问题,它将继承的字段设置为null。为了演示,假设我有以下类层次结构:
@NoArgsConstructor
@AllArgsConstructor
@Getter
abstract class Person {
protected String name;
protected Integer age;
}
@NoArgsConstructor
@AllArgsConstructor
@With
@Getter
class Employee extends Person {
protected String id;
@Builder
public Employee(String name, Integer age, String id) {
super(name, age);
this.id = id;
}
}
当我尝试做:
var template = Employee.builder().name("John Smith").age(20).build();
var clone = template.withId("ABC123");
两个<code>克隆。name</code>和<code>克隆。age返回null。允许这种构造吗?我如何让它工作?
@With在继承上好像不行。作为一种解决方法,您可以尝试以下代码:
@NoArgsConstructor
@AllArgsConstructor
@Getter
abstract class Person {
protected String name;
protected Integer age;
}
@Getter
@AllArgsConstructor
class Employee extends Person {
protected String id;
@Builder
public Employee(String name, Integer age, String id) {
super(name, age);
this.id = id;
}
public Employee withId(String id) {
return this.id == id ? this : new Employee(name, age, id);
}
}
它会起作用,但不幸的是,您必须自己实现“withId”方法。
我无法使用您的代码进行复制,因为它是错误的,请修复以下错误,然后您就可以运行代码了:
编译错误:
int
传递给字符串
。你调用 .age(20),
但它被定义为字符串年龄
。id
与上述相同。Person
类应该是抽象类
,而不是抽象类
。Person
的全参数构造函数未定义,因此 Employee
不会编译。用@AllArgsConstructor
注释人员
。Employee
上的@AllArgsConstructor
和@NoArgsConstructor
。警告:
>
Lombok 需要@With
注释 Employee 类中的基本默认构造函数 - 您必须手动定义它:
public Employee(int id)。
在 https://projectlombok.org/features/With 阅读@With
注释的规范。
@with
依赖于所有字段的构造函数来完成其工作。如果此构造函数不存在,您的@with
注释将导致编译时错误消息。
在解决了以上所有问题后,代码开始工作。下次,请至少准备一个可编译的片段。
@Test
void testWith() {
var template = Employee.builder().name("John Smith").age(20).build();
var clone = template.withId(23);
assertThat(clone.getId(), is(23));
}
安装了插件,这样当我们签入时,执行一个构建,如果成功,则验证中的修改。如果构建失败,那么就不是。我的理解是,这是通过在中设置的工作来实现的。我们现在已经创建了一个新分支(),我想我需要克隆指向另一个分支的现有作业,以便在每次提交时执行相同的工作流和构建。有人能解释一下我是如何克隆这些工作的吗?我似乎看不到一种通过UI来完成的方法,甚至看不到一种通过UI列出作业的方法。
问题内容: 我有一个用XML定义的ViewGroup,里面有一个视图,在onCreate时我想拥有一个变量。 我不想经历使用listview + adapter的麻烦,因为我知道列表不会更改,因为onCreate() 这显然是过大的杀伤力,这或多或少是我想要的代码。 但这是行不通的。 问题答案: 也许使用充气机,然后将textview放在外部布局文件中:
我想在更深层次的继承中为一个类实现构建器模式,其中一些字段是强制性的(message,case),而一些字段是可选的(myOptField1,MyOptField2…)通过使用Lombok@Builder并假设父类不能更改。因此,我实现了自己的builder(),如下所示: 那么这个类的使用方式可以是: 在IntelliJ的想法中,一切似乎都很好,但我得到了编译错误: 因此编译器只能看到由Lomb
我在日食中面临着一个常见但令人恼火的问题。我只是想用eclipseLink运行这个查询: List organizationUnitEntityList=entityManager。createQuery(“从OrganizationUnitEntity o中选择o,其中o.unitId=?1”)。setParameter(1,userTypeDomain.getUnitId()。getResul
我一直在使用此代码手动将屏幕设置为我的显示器像素尺寸: 我想找到一种方法,将JFrame设置为在任何显示器上全屏显示,但考虑到我的“Game”类包含其他方法和变量,我无法将其从这个启动程序代码中删除。
本文向大家介绍如何复制或克隆Java ArrayList?,包括了如何复制或克隆Java ArrayList?的使用技巧和注意事项,需要的朋友参考一下 java.util.ArrayList类的 clone()方法返回此ArrayList实例的浅表副本(即,不复制元素本身)。使用此方法,可以将一个数组列表的内容复制到另一个数组列表。 示例 输出结果