在 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的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot整合lombok省略set和get方法

优雅的Java工具库Lombok

记录一次bug解决过程:eclipse集成lombok插件

手写一个简易的lombok

lombok在继承类上的使用

lombok系列3:lombok的实验类特性