假设这是我的类。我想为除了Date之外的所有字段使用getter和setter。这是排除的方法吗?
@Datapublic class User { String first; String last; String email; Date dob; Boolean active;}
@Data
public class User {
String first;
String last;
String email;
Date dob;
Boolean active;
}
8yparm6h1#
我想这是唯一的隐藏方法:
@Getter(value=AccessLevel.PRIVATE)@Setter(value=AccessLevel.PRIVATE)private Date dob;
@Getter(value=AccessLevel.PRIVATE)
@Setter(value=AccessLevel.PRIVATE)
private Date dob;
或者像Ken Chan的answer建议的那样使用AccessLevel.NONE更好因此覆盖了访问级别。但是这并没有对构造函数隐藏它。你也可以使用继承的技巧。像这样定义类:
AccessLevel.NONE
public class Base { // @Getter if you want private Date dob;}
public class Base {
// @Getter if you want
然后让你的User来扩展它:
User
@Datapublic class User extends Base { private String first; private String last; private String email; private Boolean active;}
public class User extends Base {
private String first;
private String last;
private String email;
private Boolean active;
wnavrhmk2#
好吧,或者更好的是使用AccessLevel.NONE来完全使它不生成getter或setter。不会生成私有getter或setter。
@Getter(value=AccessLevel.NONE)@Setter(value=AccessLevel.NONE)private Date dob;
@Getter(value=AccessLevel.NONE)
@Setter(value=AccessLevel.NONE)
olqngx593#
您可以通过使用以下注解来完成此操作:
@Getter(value=AccessLevel.NONE) @Setter(value=AccessLevel.NONE) private LocalDate dob;
private LocalDate dob;
最好使用LocalDate而不是Date。Date是一个已弃用的API。@pirho,你的例子仍然创建了getter和setter,但使它们成为私有的。
myzjeezk4#
我不确定这是否是最佳实践,但是当我必须从@EqualsAndHashCode中排除@ManyToMany字段(以防止堆栈溢出)时,我是这样做的
@EqualsAndHashCode
@ManyToMany
@Entity@Table(name = "users")@Data@EqualsAndHashCodepublic class User implements UserDetails {// ... @ManyToMany @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id"), @JoinColumn(name = "username", referencedColumnName = "username")}, inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id"), @JoinColumn(name = "role", referencedColumnName = "role")}) @EqualsAndHashCode.Exclude private Set<Role> authorities;
@Entity
@Table(name = "users")
public class User implements UserDetails {
// ...
@JoinTable(name = "user_role",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id"),
@JoinColumn(name = "username", referencedColumnName = "username")},
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id"),
@JoinColumn(name = "role", referencedColumnName = "role")})
@EqualsAndHashCode.Exclude
private Set<Role> authorities;
换句话说,我显式地添加了一个@EqualsAndHashCode,这样我就可以在@ManyToMany字段处放置一个@EqualsAndHashCode.Exclude注解。
4条答案
按热度按时间8yparm6h1#
我想这是唯一的隐藏方法:
或者像Ken Chan的answer建议的那样使用
AccessLevel.NONE
更好因此覆盖了访问级别。但是这并没有对构造函数隐藏它。
你也可以使用继承的技巧。像这样定义类:
然后让你的
User
来扩展它:wnavrhmk2#
好吧,或者更好的是使用
AccessLevel.NONE
来完全使它不生成getter或setter。不会生成私有getter或setter。olqngx593#
您可以通过使用以下注解来完成此操作:
最好使用LocalDate而不是Date。Date是一个已弃用的API。
@pirho,你的例子仍然创建了getter和setter,但使它们成为私有的。
myzjeezk4#
我不确定这是否是最佳实践,但是当我必须从
@EqualsAndHashCode
中排除@ManyToMany
字段(以防止堆栈溢出)时,我是这样做的换句话说,我显式地添加了一个
@EqualsAndHashCode
,这样我就可以在@ManyToMany
字段处放置一个@EqualsAndHashCode.Exclude
注解。