你可以对任何字段使用@Getter
和@Setter
注解,然后Lombok将自动为其生成默认的getter和setter方法。
如果该字段名为foo
。默认的getter方法将简单的返回该字段的值,该方法将会被命名为getFoo
(如果该字段类型为boolean
,将命名为isFoo
)。默认的setter方法将命名为setFoo
,返回值为void
并带有一个类型与foo
相同的参数,然后简单的进行赋值操作。
除非像实例中那样显示得指定访问级别,生成的getter和setter方法都将是public
级别。合法的访问级别有:PUBLIC
,PROTECTED
,PACKAGE
,和 PRIVATE
。
如果希望对类中所有非static字段生成getter和(或)setter,你可以在该类的声明上添加@Getter
和(或)@Setter
。
你可以在@Getter
,@Setter
或@Data
注解的类中使用特殊的访问级别AccessLevel.NONE
来禁止Lombok自动生成getter和setter。
可以使用onMethod=@__({@AnnotationsHere})
在生成方法上放置一些其他的注解(@AnnotationsHere
);可以使用onParam=@__({@AnnotationsHere})
在生成方法参数上放置一些其他的注解(@AnnotationsHere
);另外请注意这是个实验特性,更多信息参见关于onX
特性的文档。
v1.12.0的更新: 字段上的javadoc将被复制到生成的getter和setter方法上。通常是所有文档都会被复制,@return
将会移动到getter方法上,@param
移动到setter方法上。出现移动操作,也就意味着从原javadoc文本中删除,这一部分将不会被直接复制。还可以为每一个getter和setter定义单独的文本。为此需要创建名为GETTER
和SETTER
的‘片段’,一个片段在javadoc中就是一行文字,片段名必须为--GETTER--
或者--SETTER--
。如果使用片段,Lombok则不再对@return
和@param
进行移除操作,所以需要将其放置到指定的片段中。
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] (default: false)
默认为false。如果设置为true,生成的setter方法返回值将用this
代替void
。使用@Accessors
显式配置链参数优于这个配置。
lombok.accessors.fluent = [true | false] (default: false)
默认为false。如果设置为true,生成的getter和setter方法将不使用标准得bean前缀(get、is、set),方法直接使用字段名作为方法名(没有前缀)。使用@Accessors
显式配置链参数优于这个配置。
lombok.accessors.prefix += a field prefix (default: empty list)
这是一个list属性,默认为空list;使用+=
操作符添加属性。使用-=
操作符从父配置文件中移除已添加的前缀属性。Lombok将从字段名称中删除任何匹配的字段前缀,以便确定要生成的getter/setter的名称。例如,如果m是这个设置中列出的前缀之一,那么名为mFoobar的字段将导致名为getFoobar()的getter,而不是getMFoobar()。使用@Accessors
显式配置前缀参数优于这个配置。
lombok.getter.noIsPrefix = [true | false] (default: false)
默认为fasle。如果设置为true,为boolean类型字段生成的getter将以get
而不是is
作为前缀,同时其他的生成方法(如@ToString)中进行调用的地方也会发生变化。
lombok.setter.flagUsage = [warning | error] (default: not set)
默认不进行设置,配置后Lombok将会把使用@Setter
的类标记为错误或者警告。
lombok.getter.flagUsage = [warning | error] (default: not set)
默认不进行设置,配置后Lombok将会把使用@Getter
的类标记为错误或者警告。
关于生成的方法名,如果字段首字母是小写,则会进行标题大写处理(首字母大写),否则保持不变,然后加上get/set/is等前缀。
如果已经存在与生成方法名(大小写不敏感)相同、参数个数相同*++(这个地方表述可能有些不对,实际上是不考虑参数个数的)++*, 都不在生成对应的方法。例如,如果已经有方法getFoo(String ... x),则不会生成getFoo(),即使在技术上可以制作该方法。这主要是为了避免混淆,如果因为这个原因跳过生成方法,Lombok将会发出警告:Varargs count as 0 to N parameters
。您可以使用@ lombok.experimental.Tolerate
使其对Lombok隐藏。
对于boolean类型的字段,如果字段名以is
开头,然后紧接着是首字母大写的名称,则生成的方法名将不再额外添加前缀。
一些boolean的变体可能会导致生成方法使用get
作为前缀而不是is
。比如,返回java.lang.Boolean会产生get前缀,而不是is前缀。
有很多流行的表示非null的注解,比如javax.annotation.Nonnull
。如果字段上使用这些注解,生成的
一些总所周知的关于null检测的注解(如@org.eclipse.jdt.annotation.NonNull
)将会自动的拷贝到相应的位置(getter方法和setter的参数)。可以配置lombok.copyableAnnotations
选项来定义Lombok拷贝的额外注解。
你可以在对类使用@Getter
和@Setter
注解,其实就是相当于对该类的所有非静态字段使用这个注解。在字段上显式使用@Getter
和@Setter
注解由于类上的注解。
使用AccessLevel.NONE
访问级别后Lombok将不会生成任何代码。但是必须与@Data
或者类级别的@Getter
和@Setter
一起使用才有效。
@Getter
还可以用于枚举类,但是@Setter
不行。这并不是技术原因,而是一个实用性问题:在枚举类上使用setter是一个非常糟糕的主意。
全部评论