@Getter and @Setter
永远不要再写public int getFoo() {return foo;}
了。
Overview
您可以使用@Getter
和/或@Setter
注释任何字段,让lombok自动生成默认的getter / setter。
默认的getter只返回该字段,如果该字段是foo
(或者isFoo
字段的类型是boolean
),则命名为getFoo
。如果字段被是foo
,默认的setter命名为setFoo
且返回一个 void
,并接收1个与该字段相同类型的参数。它只是将字段设置为此值。
生成的getter / setter方法将是public
除非您明确指定AccessLevel
,如下面的示例所示。逻辑访问级别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
进线部分)。
With Lombok
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);
}
}
Vanilla Java
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;
}
}
Supported configuration keys:
lombok.accessors.chain = [true | false] (default: false)
如果设置为true
,则生成的setter将返回this
(而不是void
)。显式配置chain
的@Accessors
注释参数优先于此设置。
lombok.accessors.fluent = [true | false] (default: false)
如果设置为true
,生成的getter和setter将不会以bean标准为前缀get
,is
或set
; 相反,这些方法将使用与字段相同的名称(减去前缀)。显式配置chain
的@Accessors
注释参数优先于此设置。
lombok.accessors.prefix += a field prefix (default: empty list)
这是一个列表属性; 条目可以与+=
操作符一起添加。可以使用-=
运算符删除父配置文件中的继承前缀。Lombok将从字段名称中删除任何匹配的字段前缀,以确定要生成的getter / setter的名称。例如,如果m
在此设置中列出的前缀之一,那么一个名为场mFoobar
将导致一个名为吸气getFoobar()
,没有getMFoobar()
。显式配置prefix
的@Accessors
注释参数优先于此设置。
lombok.getter.noIsPrefix = [true | false] (default: false)
如果设置为true
,则为boolean
字段生成的getter 将使用get
前缀而不是默认is
前缀,并且任何生成的调用getter的代码(例如)@ToString也将使用get
而不是is
。
lombok.setter.flagUsage = [warning | error] (default: not set)
如果配置, Lombok会将任何@Setter
用法标记为警告或错误。
lombok.getter.flagUsage = [warning | error] (default: not set)
如果配置, Lombok会将任何@Getter
用法标记为警告或错误。
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)
Lombok会将任何这些注释从字段复制到setter参数和getter方法。请注意,lombok附带了一堆“开箱即用”的注释,这些注释已知是可复制的:所有流行的可空/非空注释。
Small print
为了生成方法名称,字段的第一个字符(如果是小写字符)是标题字符,否则,它保持不变。然后,get / set /是前缀。
如果已存在具有相同名称(不区分大小写)和相同参数计数的任何方法,则不会生成任何方法。例如,即使在技术上可以制作方法,getFoo()
如果已经有方法getFoo(String... x)
也不会生成。这个警告是为了防止混淆。如果由于这个原因跳过了方法的生成,则会发出警告。Varargs计为0到N个参数。你可以标记任何方法@lombok.experimental.Tolerate
来隐藏它们从lombok。
对于boolean
以is
紧跟着标题大小写字母开头的字段,不会生成任何前缀以生成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是一个非常糟糕的主意。