我有一个类,我继承了一些字段,其中包括我的 id 字段和我对对象的不同字段。 我正在使用 lombok 生成 @EqualsAndHashCode 和 @ToString,但只想使用我的父类(super class)的版本,并排除我的类中的所有字段。 我想知道是否有一种方法可以做到这一点,而不使用排除,然后添加所有字段。
我的类(class):
@EqualsAndHashCode(of = { "id" })
@ToString(of = { "id", "email", "name" })
@Data
public abstract class Resource {
@Id
private Integer id;
private String name;
private String email;
}
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Data
public class Employee extends Resource {
private Organisation organisation;
private List<Skill> skills = new ArrayList<Skill>();
}
在这里,我将获得 ToString、Equals 和 HashCode 的组织和技能。
要排除它们,我可以使用:
@ToString(callSuper = true, exclude = { "organisation", "skills" })
但是,由于我的字段比示例更多,并且将来可能会更多,因此我希望能够排除除父类(super class)之外的所有字段。
我还可以使用 of = {}
添加一个字段。
有没有更好的方法来实现这一点?
最佳答案
不简单
@ToString(callSuper = true, of = {})
工作? Lombok 对父类(super class)字段一无所知(因为此信息在运行时不可用),并且您不能包含 id
或排除 name
。您所能做的就是让它调用 super.toString()
。当您根本不包含任何字段时,您会得到类似的内容
Employee(super=Resource(43, Larvalis, larvalis@somewhere.com))
这可能是你想要的,也可能不是。你可以改为写
public String toString() {
return getClass().getSimpleName()
+ super.toString().replaceFirst("^[^(]+", "");
}
所以你会得到
Employee(43, Larvalis, larvalis@somewhere.com)
更新:
同时,of
参数已过时,请参阅@Datz 答案中的onlyExplicitlyIncluded
。
关于java - 仅在 @EqualsAndHashCode 和 @ToString 中使用 callsuper 的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351967/