-
Notifications
You must be signed in to change notification settings - Fork 1
@Getter and @Setter
你可以使用 @Getter
和/或 @Setter
注释任何字段,让lombok自动生成默认的getter/setter。
默认的getter只返回字段,如果字段名为foo
(isFoo
,如果字段的类型为boolean
),则getter命名为 getFoo()
。如果字段名为foo
,默认的setter名为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
的“section”。一个section是你的javadoc一行中包含2个或更多短划线,然后是文本GETTER
或SETTER
,后面跟着2个或更多的短划线,行上没有其他内容。如果使用section,则不再执行 @return
和 @param
部分的移动(将 @return
或 @param
行移动到指定的section中)。
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
/**
* Age of the person. Water is wet.
*
* @param age New value for this person's age. Sky is blue.
* @return The current value of this person's age. Circles are round.
*/
@Getter @Setter private int age = 10;
/**
* Name of the person.
* -- SETTER --
* Changes the name of this person.
*
* @param name The new value.
*/
@Setter(AccessLevel.PROTECTED) private String name;
@Override public String toString() {
return String.format("%s (age: %d)", name, age);
}
}
public class GetterSetterExample {
/**
* Age of the person. Water is wet.
*/
private int age = 10;
/**
* Name of the person.
*/
private String name;
@Override public String toString() {
return String.format("%s (age: %d)", name, age);
}
/**
* Age of the person. Water is wet.
*
* @return The current value of this person's age. Circles are round.
*/
public int getAge() {
return age;
}
/**
* Age of the person. Water is wet.
*
* @param age New value for this person's age. Sky is blue.
*/
public void setAge(int age) {
this.age = age;
}
/**
* Changes the name of this person.
*
* @param name The new value.
*/
protected void setName(String name) {
this.name = name;
}
}
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
为前缀;相反,这些方法将使用与字段相同的名称(减去get
,is
或 set
前缀)。 @Accessors
注解的显式配置的 chain
参数优先于此设置。
lombok.accessors.prefix
+=字段前缀(默认值:空列表)
这是一个列表属性;可以使用+=运算符添加条目。可以使用-=运算符删除父配置文件中的继承前缀。 Lombok将从字段名称中删除任何匹配的字段前缀,以确定要生成的 getter/setter 的名称。例如,如果 m
是此设置中列出的前缀之一,则名为 mFoobar
的字段将生成名为 getFoobar()
的getter,而不是 getMFoobar()
。 @Accessors
注解的显式配置的 chain
参数优先于此设置。
lombok.getter.noIsPrefix
= [ true
| false
](默认值:false)
如果设置为 true
,则为布尔字段生成的 getter 将使用 get
前缀而不是默认的 is
前缀,并且任何调用 getter 的生成代码, 如@ToString
, 也将使用 get
而不是 is
。
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
开头且后面紧跟着大写字母的布尔字段,不会添加任何前缀来生成getter名称。
布尔值的任何变化都不会导致使用 is
前缀,而不使用 get
前缀;例如,返回java.lang.Boolean
会产生 get
前缀,而不是 is
前缀。
来自流行库的表示非null的许多注解,例如 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
不能用于枚举,不是出于技术原因,而是出于务实的原因:在枚举上的Setters是一个非常糟糕的主意。
我的代码里面附加了对于常用的配置的使用示例,参见代码