在 Lombok 中省略一个 Setter/Getter
Posted
技术标签:
【中文标题】在 Lombok 中省略一个 Setter/Getter【英文标题】:Omitting one Setter/Getter in Lombok 【发布时间】:2011-12-21 02:26:55 【问题描述】:我想在 Lombok 中使用数据类。由于它有大约十几个字段,我用@Data
对其进行了注释,以便生成所有的setter 和getter。但是,有一个特殊字段我不希望实现访问器。
Lombok 是如何省略这个字段的?
【问题讨论】:
【参考方案1】:使用以下代码省略/排除 创建 setter 和 getter。 value 键应在@Getter
和@Setter
内使用。
@Getter(value = AccessLevel.NONE)
@Setter(value = AccessLevel.NONE)
private String mySecret;
【讨论】:
【参考方案2】:根据@Data description可以使用:
所有生成的 getter 和 setter 都是公开的。覆盖 访问级别,使用显式 @Setter 注释字段或类 和/或 @Getter 注释。您也可以使用此注释(通过 将它与 AccessLevel.NONE 结合使用以抑制生成 getter 和/或二传手。
【讨论】:
【参考方案3】:您可以将访问级别传递给@Getter
和@Setter
注释。这对于使 getter 或 setter 受保护或私有很有用。它也可以用来覆盖默认值。
使用@Data
,默认情况下您可以公开访问访问器。您现在可以使用特殊的访问级别 NONE
来完全省略访问器,如下所示:
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
【讨论】:
完美。如果私有字段是 POJO 并且还使用 @Delegate() 注释,则它可以用于将一组属性提取到单独的可重用类中。这对于将同一组属性应用于多个类(一种用于添加属性的混合)可能很有用。例如,代表一组属性的 mixin,可应用于各种 XML 元素的建模。 你有没有类似的事情在builder中省略一个字段? 您的意思是该属性不应该出现在构建器中?不,没有什么直接用于此的。请记住,@Builder
可以放在函数和构造函数以及类上,并且只提供设置该函数签名中出现的那些属性。
它没有为此属性实现任何setter和getter,其中@Data默认包含setter和getter。通过提及AccessLevel.NONE
将被排除在外。以上是关于在 Lombok 中省略一个 Setter/Getter的主要内容,如果未能解决你的问题,请参考以下文章