gpt4 book ai didi

java - 仅在 @EqualsAndHashCode 和 @ToString 中使用 callsuper 的更好方法?

转载 作者:行者123 更新时间:2023-12-01 22:02:17 26 4
gpt4 key购买 nike

我有一个类,我继承了一些字段,其中包括我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com