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

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

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

  1. @Data
  2. public class User {
  3. String first;
  4. String last;
  5. String email;
  6. Date dob;
  7. Boolean active;
  8. }
8yparm6h

8yparm6h1#

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

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

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

  1. public class Base {
  2. // @Getter if you want
  3. private Date dob;
  4. }

然后让你的User来扩展它:

  1. @Data
  2. public class User extends Base {
  3. private String first;
  4. private String last;
  5. private String email;
  6. private Boolean active;
  7. }
展开查看全部
wnavrhmk

wnavrhmk2#

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

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

olqngx593#

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

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

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

myzjeezk

myzjeezk4#

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

  1. @Entity
  2. @Table(name = "users")
  3. @Data
  4. @EqualsAndHashCode
  5. public class User implements UserDetails {
  6. // ...
  7. @ManyToMany
  8. @JoinTable(name = "user_role",
  9. joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id"),
  10. @JoinColumn(name = "username", referencedColumnName = "username")},
  11. inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id"),
  12. @JoinColumn(name = "role", referencedColumnName = "role")})
  13. @EqualsAndHashCode.Exclude
  14. private Set<Role> authorities;

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

展开查看全部

相关问题