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

问题描述 投票:0回答:4

假设这是我的课。我想要除日期之外的所有字段的 getter 和 setter。有办法排除吗?

@Data
public class User {
    String first;
    String last;
    String email;
    Date dob;
    Boolean active;
}
java spring getter-setter lombok
4个回答
18
投票

我认为这是隐藏的唯一方法:

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

或者像 Ken Chan 的

answer
建议的AccessLevel.NONE 可能更好

so 覆盖访问级别。然而,这并没有向构造函数隐藏它。

你也可以用继承来耍花招。定义类:

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;
}

15
投票

Well ,或者更好的是使用

AccessLevel.NONE
完全使其不生成 getter 或 setter。不会生成私有 getter 或 setter。

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

3
投票

您可以使用以下注释来做到这一点:

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

最好使用 LocalDate 而不是 Date。日期是一个已弃用的 API。

@pirho,您的示例仍然创建 getter 和 setter,但将它们设为私有。


0
投票

我不确定这是最佳实践,但是当我不得不从

@ManyToMany
(以防止stackoverflow)中排除
@EqualsAndHashCode
字段时我所做的是这个

@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
,这样我就可以在
@EqualsAndHashCode.Exclude
字段上放置一个
@ManyToMany
注释。你可以用你的 getters 和 setters 做类似的事情。有效

© www.soinside.com 2019 - 2024. All rights reserved.