@Getter 和 @Setter
永远不再编写 public int getFoo() {return foo;}
。
概述
你可以使用 @Getter
和/或 @Setter
注解任何字段,让 lombok 自动生成默认的 getter/setter。
默认的 getter 只是简单地返回字段,如果字段名为 foo
,则命名为 getFoo
(如果字段类型为 boolean
,则命名为 isFoo
)。默认的 setter 如果字段名为 foo
,则命名为 setFoo
,返回 void
,并接受与字段类型相同的 1 个参数。它只是简单地将字段设置为此值。
除非你显式指定 AccessLevel
,否则生成的 getter/setter 方法将是 public
,如下例所示。合法的访问级别有 PUBLIC
、PROTECTED
、PACKAGE
和 PRIVATE
。
你也可以在类上放置 @Getter
和/或 @Setter
注解。在这种情况下,就好像你使用注解注解了该类中的所有非静态字段。
你始终可以使用特殊的 AccessLevel.NONE
访问级别手动禁用任何字段的 getter/setter 生成。这允许你覆盖类上的 @Getter
、@Setter
或 @Data
注解的行为。
要在生成的方法上放置注解,你可以使用 onMethod=@__({@AnnotationsHere})
;要在生成的 setter 方法的唯一参数上放置注解,你可以使用 onParam=@__({@AnnotationsHere})
。但请注意!这是一个实验性功能。有关更多详细信息,请参阅关于 onX 功能的文档。
lombok v1.12.0 中的新功能: 字段上的 javadoc 现在将被复制到生成的 getter 和 setter。通常,所有文本都会被复制,并且 @return
会移动到 getter,而 @param
行会移动到 setter。移动意味着:从字段的 javadoc 中删除。也可以为每个 getter/setter 定义唯一的文本。为此,你创建一个名为 GETTER
和/或 SETTER
的“节”。节是你的 javadoc 中的一行,包含 2 个或更多破折号,然后是文本“GETTER”或“SETTER”,后跟 2 个或更多破折号,并且该行上没有其他内容。如果你使用节,则不再对该节进行 @return
和 @param
剥离(将 @return
或 @param
行移动到节中)。
使用 Lombok
import lombok.AccessLevel;
|
Vanilla Java
public class GetterSetterExample {
|
支持的配置键
-
lombok.accessors.chain
= [true
|false
] (默认值: false) - 如果设置为
true
,则生成的 setter 将返回this
(而不是void
)。显式配置的@Accessors
注解的chain
参数优先于此设置。 -
lombok.accessors.fluent
= [true
|false
] (默认值: false) - 如果设置为
true
,则生成的 getter 和 setter 将不会以 bean 标准的 'get
、is
或set
' 为前缀;相反,方法将使用与字段相同的名称(减去前缀)。显式配置的@Accessors
注解的fluent
参数优先于此设置。 -
lombok.accessors.prefix
+= 字段前缀 (默认值: 空列表) - 这是一个列表属性;可以使用
+=
运算符添加条目。可以使用-=
运算符删除从父配置文件继承的前缀。Lombok 将从字段名称中删除任何匹配的字段前缀,以确定要生成的 getter/setter 的名称。例如,如果m
是此设置中列出的前缀之一,则名为mFoobar
的字段将导致 getter 名为getFoobar()
,而不是getMFoobar()
。显式配置的@Accessors
注解的prefix
参数优先于此设置。 -
lombok.getter.noIsPrefix
= [true
|false
] (默认值: false) - 如果设置为
true
,则为boolean
字段生成的 getter 将使用get
前缀而不是默认的is
前缀,并且任何调用 getter 的生成代码(例如@ToString
)也将使用get
而不是is
-
lombok.accessors.capitalization
= [basic
|beanspec
] (默认值: basic) - 控制如何对像
uShaped
这样棘手的情况(一个小写字母后跟一个大写/首字母大写字母)进行大写。basic
将其大写为getUShaped
,而beanspec
将其大写为getuShaped
。
两种策略在 java 生态系统中都很常用,尽管beanspec
更常见。 -
lombok.setter.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 会将任何
@Setter
的使用标记为警告或错误。 -
lombok.getter.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 会将任何
@Getter
的使用标记为警告或错误。 -
lombok.copyableAnnotations
= [完全限定类型列表] (默认值: 空列表) - Lombok 会将这些注解中的任何一个从字段复制到 setter 参数和 getter 方法。请注意,lombok 附带了一堆“开箱即用”的注解,这些注解已知是可复制的:所有流行的可空/非空注解。
小字印刷
对于生成方法名称,字段的第一个字符(如果是小写字符)将被首字母大写,否则保持不变。然后,添加 get/set/is 前缀。
如果任何方法已经存在相同的名称(不区分大小写)和相同的参数计数,则不会生成方法。例如,如果已经有一个方法 getFoo(String... x)
,即使从技术上讲可以创建该方法,也不会生成 getFoo()
。此警告存在是为了防止混淆。如果由于此原因跳过方法的生成,则会发出警告。Varargs 算作 0 到 N 个参数。你可以使用 @lombok.experimental.Tolerate
标记任何方法,以将其从 lombok 中隐藏。
对于以 is
开头并紧跟首字母大写字母的 boolean
字段,不会添加任何前缀来生成 getter 名称。
任何 boolean
的变体都不会导致使用 is
前缀而不是 get
前缀;例如,返回 java.lang.Boolean
会导致 get
前缀,而不是 is
前缀。
来自流行库的许多指示非空的注解(例如 javax.annotation.Nonnull
),如果存在于字段上,则会导致在生成的 setter 中进行显式的空值检查。
各种关于可空性的知名注解,例如 org.eclipse.jdt.annotation.NonNull
,会自动复制到正确的位置(getter 的方法,setter 的参数)。你可以通过 lombok 配置键 lombok.copyableAnnotations
指定应始终复制的其他注解。
你可以使用 @Getter
或 @Setter
注解类。这样做等效于使用该注解注解该类中的所有非静态字段。字段上的 @Getter
/@Setter
注解优先于类上的注解。
使用 AccessLevel.NONE
访问级别只是不生成任何内容。它仅在与 @Data
或类范围的 @Getter
或 @Setter
结合使用时才有用。
@Getter
也可以用于枚举。@Setter
不可以,不是出于技术原因,而是出于务实的原因:枚举上的 Setter 是一个非常糟糕的主意。