Lar*_*lis 2 java inheritance tostring lombok
我有一个课,我继承了一些字段,其中包括我的id字段和那些我对象的区别.我使用lombok生成我的@EqualsAndHashCode和@ToString,但只想使用我的超类的版本,并排除我班级中的所有字段.我想知道是否有办法做到这一点,不使用排除,然后添加所有字段.
我的课程:
@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>();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我将获得ToString,Equals和HashCode的组织和技能.
为了排除它们,我可以使用:
@ToString(callSuper = true, exclude = { "organisation", "skills" })
Run Code Online (Sandbox Code Playgroud)
然而,因为我有更多的字段而不是示例,并且将来可能会有更多的字段,我宁愿我能排除除了超级类之外的所有字段.
我还可以添加一个字段of = {}
.
有没有更好的方法来实现这一目标?
不会简单
@ToString(callSuper = true, of = {})
Run Code Online (Sandbox Code Playgroud)
工作?Lombok对超类字段一无所知(因为此信息在运行时不可用),您无法包含id
或排除name
.你所能做的就是打电话super.toString()
.当你根本不包括任何字段时,你会得到类似的东西
Employee(super=Resource(43, Larvalis, larvalis@somewhere.com))
Run Code Online (Sandbox Code Playgroud)
这可能是也可能不是你想要的.你可以改写
public String toString() {
return getClass().getSimpleName()
+ super.toString().replaceFirst("^[^(]+", "");
}
Run Code Online (Sandbox Code Playgroud)
所以你会得到的
Employee(43, Larvalis, larvalis@somewhere.com)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5487 次 |
最近记录: |