java 我可以从lomboks @Data注解中排除字段吗?

zbdgwd5y  于 2023-04-04  发布在  Java
关注(0)|答案(4)|浏览(378)

假设这是我的类。我想为除了Date之外的所有字段使用getter和setter。这是排除的方法吗?

@Data
public class User {
    String first;
    String last;
    String email;
    Date dob;
    Boolean active;
}
8yparm6h

8yparm6h1#

我想这是唯一的隐藏方法:

@Getter(value=AccessLevel.PRIVATE)
@Setter(value=AccessLevel.PRIVATE)
private Date dob;

或者像Ken Chan的answer建议的那样使用AccessLevel.NONE更好
因此覆盖了访问级别。但是这并没有对构造函数隐藏它。
你也可以使用继承的技巧。像这样定义类:

public class Base {
    // @Getter if you want
    private Date dob;
}

然后让你的User来扩展它:

@Data
public class User extends Base {
    private String first;
    private String last;
    private String email;
    private Boolean active;
}
wnavrhmk

wnavrhmk2#

好吧,或者更好的是使用AccessLevel.NONE来完全使它不生成getter或setter。不会生成私有getter或setter。

@Getter(value=AccessLevel.NONE)
@Setter(value=AccessLevel.NONE)
private Date dob;
olqngx59

olqngx593#

您可以通过使用以下注解来完成此操作:

@Getter(value=AccessLevel.NONE)
    @Setter(value=AccessLevel.NONE)
    private LocalDate dob;

最好使用LocalDate而不是Date。Date是一个已弃用的API。
@pirho,你的例子仍然创建了getter和setter,但使它们成为私有的。

myzjeezk

myzjeezk4#

我不确定这是否是最佳实践,但是当我必须从@EqualsAndHashCode中排除@ManyToMany字段(以防止堆栈溢出)时,我是这样做的

@Entity
@Table(name = "users")
@Data
@EqualsAndHashCode
public 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;

换句话说,我显式地添加了一个@EqualsAndHashCode,这样我就可以在@ManyToMany字段处放置一个@EqualsAndHashCode.Exclude注解。

相关问题