@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 是一个非常糟糕的主意。