@Accessors
用于 getter 和 setter 的更流畅的 API。
@Accessors 在 lombok v0.11.0 中作为实验性功能引入。
lombok.config 选项 lombok.accessors.capitalization = [basic | beanspec] 在 lombok v1.18.24 中添加。
功能变更:@Accessors 现在“级联”;任何未在字段级 @Accessors 注解上设置的选项将从类上的 @Accessors 注解继承(以及任何在这些注解上未设置的选项,从封闭类继承)。最后,在 lombok.config 中设置的任何内容都将用作默认值。(lombok v1.18.24)
新功能:@Accessors(makeFinal = true) 将创建 final getter、setter 和 with-er。还有一个 lombok.config 键 lombok.accessors.makeFinal 具有相同的效果。(lombok v1.18.24)
实验性
实验性,因为- 我们可能希望将这些功能整合到更完整的属性支持概念中。
makeFinal功能是最近发布的;正在等待社区反馈。
- 开放的功能请求:更多地控制访问器命名;例如,解决创造性命名的布尔属性:将
boolean wasRunning转换为boolean wasRunning()而不是boolean isWasRunning(),以及更广泛的前缀支持。如果此功能 请求 得到解决,@Accessors将会参与其中。 @Accessors目前不会从字段@Accessors注解“级联”到类级@Accessors注解,但它会“级联”到lombok.config。更改这一点并不困难,但会向后不兼容。它不太可能破坏太多现有代码,但这需要在该功能可以移出实验性状态之前决定。
概述
@Accessors 注解用于配置 lombok 如何生成和查找 getter、setter 和 with-er。
默认情况下,lombok 遵循 bean 规范 来生成 getter 和 setter:例如,名为 pepper 的字段的 getter 是 getPepper。但是,有些人可能希望打破 bean 规范,以便最终得到外观更友好的 API。@Accessors 允许你这样做。
一些程序员喜欢为他们的字段使用前缀,即他们写 fPepper 而不是 pepper。我们强烈不建议这样做,因为你无法单元测试你的前缀的有效性,并且重构脚本可能会将字段转换为局部变量或方法名称。此外,如果希望此信息立即可见,你的工具(例如你的编辑器)可以负责以某种方式呈现标识符。尽管如此,你也可以通过 @Accessors 列出你的项目使用的前缀。
@Accessors 有 4 个选项
-
fluent– 一个布尔值。如果为 true,则pepper的 getter 只是pepper(),setter 是pepper(T newValue)。此外,除非另有说明,否则chain默认为 true。
默认值:false。 -
chain– 一个布尔值。如果为 true,则生成的 setter 返回this而不是void。
默认值:false,除非fluent=true,则默认值:true。 -
makeFinal– 一个布尔值。如果为 true,则生成的 getter、setter 和 with-er 将标记为final。
默认值:false。 -
prefix– 字符串列表。如果存在,字段必须以这些前缀中的任何一个作为前缀。每个字段名依次与列表中的每个前缀进行比较,如果找到匹配项,则剥离前缀以创建字段的基本名称。在列表中包含空字符串是合法的,它将始终匹配。对于作为字母的字符,前缀后面的字符不能是小写字母,即pepper即使对于前缀p也不是匹配项,但pEpper将是匹配项(并且意味着此字段的基本名称是epper)。
@Accessors 注解在类型和字段上都是合法的;getter/setter/with-er 将首先查看字段上的注解,其次查看字段所在的类型上的注解(并且你有类型中的类型,每个外部类型也会被检查),最后对于任何未显式设置的属性,将使用相应的 lombok.config 设置。
使用 Lombok
import lombok.experimental.Accessors;
|
原生 Java
public class AccessorsExample {
|
支持的配置键
-
lombok.accessors.chain= [true|false] (默认值: false) - 如果设置为
true,则任何没有@Accessors注解的字段/类,或者有注解但该注解没有为chain参数显式赋值的字段/类,都将表现得好像存在@Accessors(chain = true)一样。 -
lombok.accessors.fluent= [true|false] (默认值: false) - 如果设置为
true,则任何没有@Accessors注解的字段/类,或者有注解但该注解没有为fluent参数显式赋值的字段/类,都将表现得好像存在@Accessors(fluent = true)一样。 -
lombok.accessors.makeFinal= [true|false] (默认值: false) - 如果设置为
true,则任何没有@Accessors注解的字段/类,或者有注解但该注解没有为makeFinal参数显式赋值的字段/类,都将表现得好像存在@Accessors(makeFinal = true)一样。 -
lombok.accessors.prefix+= 字段前缀 (默认值: 空列表) - 这是一个列表属性;可以使用
+=运算符添加条目。可以使用-=运算符删除从父配置文件继承的前缀。任何没有@Accessors注解的类,或者有注解但该注解没有为prefix参数显式赋值的类,都将表现得好像存在@Accessors(prefix = {配置中列出的前缀})一样。 -
lombok.accessors.capitalization= [basic|beanspec] (默认值: basic) - 控制如何大写
uShaped(一个小写字母后跟一个大写/首字母大写字母)等棘手情况。basic将其大写为getUShaped,而beanspec将其大写为getuShaped。
两种策略都在 Java 生态系统中常用,尽管beanspec更常见。 -
lombok.accessors.flagUsage= [warning|error] (默认值: 未设置) - 如果配置了,Lombok 将把任何
@Accessors的使用标记为警告或错误。
小字号声明
最近的 @Accessors 注解也用于 lombok 中查找 getter 的各种方法,例如 @EqualsAndHashCode。
如果提供了前缀列表,并且字段不是以其中一个前缀开头,则 lombok 将完全跳过该字段,并会生成警告。