@Getter和@Setter
注解在字段上,自动生成getter和setter。
如果字段foo
是boolean
类型,则生成的getter叫做isFoo
,否则字段叫做getFoo
,生成的setter都叫做setFoo
。确切地说,如果字段名首字母为小写,则改为大写,否则不做改动,然后加上前缀get / set / is,如果boolean
类型字段名以is开头,紧接一个大写字母,则getter方法名为该变量名。注意只有boolean
变量有上述特性,Boolean
变量的getter方法也以get开头。
生成的getter / setter是public
的,可以指定value
属性,传入枚举类AccessLevel
,取值包括PUBLIC
、PROTECTED
、PACKAGE
和PRIVATE
。
@Getter
/ @Setter
也可以注解类,为所有字段生成getter / setter,但是静态字段不会生成getter / setter,final
字段不会生成setter。
可以在字段上注解@Getter
/ @Setter
,并设置AccessLevel.NONE
来阻止类上的注解@Data
、@Getter
和@Setter
为相应字段生成getter / setter。
如果该类已经包含了同名且参数数量相同的方法,则@Getter
/ @Setter
不再生成该方法。如果@Getter
/ @Setter
注解在字段上,且出现上述情况,会出现警告:Not generated 'xxx'(): A method with similar name 'xxx' already exits.
可以使用@Tolerate
注解同名方法,将其对lombok隐藏,但是应当留意到getter是无参方法,无法重载另一个无参方法,在已有的无参getter上使用@Tolerate
注解会导致编译报错:java: 已在类xxx中定义了方法getYyy()。
很多常见的字段注解(如org.springframework.lang.Nullable
)会被自动复制到正确的位置(getter方法上,以及setter方法参数上),可以通过lombok.copyableAnnotations
添加更多应该被复制的注解。
@Getter
可以用于枚举类,@Setter
不行。
如果想在生成的getter / setter上添加注解,可以设置onMethod=@\__({@AnnotationsHere})
属性,如果想在生成的setter的唯一参数上添加注解,可以设置onParam=@__({@AnnotationsHere})
属性。
lombok.accessors.chain = [true | false]
(默认false
)
如果设置为true
,生成的setter会返回this
,而不是void
,从而可以进行链式编程。该配置会被lombok.accessors.fluent
覆盖。该配置会被显式设置的@Accessors
的chain
属性覆盖。lombok.accessors.fluent = [true | false]
(默认false
)
如果设置为true
,生成的getter / setter不会加上前缀get / set / is,同时会覆盖lombok.accessors.chain
配置,所生成的setter会返回this
,而不是void
,从而可以进行链式编程。该配置会被显式设置的@Accessors
的fluent
属性覆盖。lombok.accessors.makeFinal = [true | false]
(默认false
)
1.18.24新增。如果设置为true
,则生成的getter / setter为final
的。该配置会被显式设置的@Accessors
的 makeFinal
属性覆盖。lombok.accessors.prefix += 字段前缀 (默认空列表)
如果使用+=m
,则以m为前缀的字段(如mFoo
)的getter
名为getFoo
而不是getMFoo
,注意mellow
的前缀并不是m
,mEllow
才是。而如果使用-=m
,则从父级配置文件继承的前缀会被移除,也就是说如果根目录下有lombok.config
,配置lombok.accessors.prefix += m
,源代码文件所在目录下有一个离它更近的lombok.config
,配置lombok.accessors.prefix -= m
,则该源代码文件中的字段mFoo
最终生成的getter名为getMFoo
。该配置会被显式设置的@Accessors
的prefix
属性覆盖。如果有字段存在前缀,但是该前缀不在列表中,则会出现编译警告:java: Not generating getter / setter for this field: It does not fit your @Accessors prefix list.
如果通过-=
去除了所继承的要移除的前缀,则不会出现警告。lombok.getter.noIsPrefix = [true | false]
(默认false
)
如果设置为true
,boolean
字段的getter方法会以get开头,lombok所生成的方法中对getter的调用也会随之改变。lombok.accessors.capitalization = [BASIC | BEANSPEC]
(默认BASIC
)
控制类似uShaped
这种字段名(一个小写字母后跟大写字母)的首字母大写行为,basic
则生成getUShaped
,beanspec
则生成getuShaped
。两种策略都很常用,java生态系统中后者使用得更广泛。lombok.setter.flagUsage = [WARNING | ERROR]
(默认不设置)
所有对@Setter
的使用都会在编译时被标记为警告或错误。设置为WARNING
时,编译警告提示:java: Use of @Setter is flagged accroding to lombok configuration.
设置为ERROR
时,无法编译通过,提示内容相同,但由警告变为错误。lombok.getter.flagUsage = [WARNING | ERROR]
(默认不设置)
所有对@Getter
的使用都会在编译时被标记为警告或错误。设置为WARNING
时,编译警告提示:java: Use of @Getter is flagged accroding to lombok configuration.
设置为ERROR
时,无法编译通过,提示内容相同,但由警告变为错误。lombok.copyableAnnotations = [注解的列表]
(默认空列表)
Lombok会将这些注解复制到正确的位置(getter方法上,以及setter方法参数上)。