前言
Lombok
是一种 Java™
实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。使用注解更优雅的编码,也能减少开发中重复造轮子。本文将介绍lombok的基础注解及参数含义。
@Getter
可选元素:
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
boolean |
lazy |
|
Getter.AnyAnnotation[] |
onMethod |
这里列出的任何注释都放在生成的方法上。 |
AccessLevel |
value |
如果你想让你的getter不公开,你可以在这里指定一个替代访问级别。 |
使用示例:
@Getter(
lazy = true,
onMethod = @_({@JsonIgnore}),
value = AccessLevel.PROTECTED
)
private final String name = "";
说明:
-
Lazy:默认为:
false
,如果设置 lazy 则 该属性必须为 final -
onMethod:默认为
{}
,此处出现的注解会在生成的方法上面,最常见的使用是结合JackJson,做序列化标注- JDK7-:
@Getter(onMethod=@__({@AnnotationsGoHere}))
- JDK8+:
@Getter(onMethod_={@AnnotationsGohere})//注意后面的下划线onMethod
- JDK7-:
-
AccessLevel:默认为
AccessLevel.PUBLIC
可以手动修改方法的访问级别,配置参数为 枚举类:AccessLevel
中属性
@Setter
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
Setter.AnyAnnotation[] |
onMethod |
这里列出的任何注释都放在生成的方法上。 |
Setter.AnyAnnotation[] |
onParam |
这里列出的任何注释都放在生成的方法参数上。 |
AccessLevel |
value |
如果你希望你的setter是非公开的,你可以在这里指定一个替代访问级别。 |
使用示例:
@Setter(value = AccessLevel.PRIVATE)
private String trueName;
说明:
-
该属性配置和
@Getter
经常结合使用 -
onParam
:该属性为参数的注解,此处可以和@NotNull
配合使用控制参数不为空,该属性配置同onMethod
@NonNull
可选元素:无
使用示例:
@NonNull private String trueName;
private String getTrueName(@NonNull String name)
说明:
- 该注解可以用在 字段、方法、参数 上 常见用于 字段 和 参数
- 如果是字段注解,那么生成的
get
、构造方法 都会进行 null 检测 - 如果是参数注解,在方法的开头会加入一个空值检测。
- 该注解检测到空值后会抛出
NullPointerException
@ToString
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
boolean |
callSuper |
toString 在输出中包含超类实现的结果。 |
boolean |
doNotUseGetters |
通常情况下,如果 getters 是可用的,那么被调用。 |
java.lang.String[] |
exclude |
这里列出的任何字段将不会被打印在生成的toString 实现中。 |
boolean |
includeFieldNames |
在打印时包括每个字段的名称。 |
java.lang.String[] |
of |
如果存在,明确列出要打印的字段。 |
调用示例:
@ToString(callSuper = true, exclude = {"id"})
@Data
public class TestModel {
private int id;
private String trueName;
}
说明:
- callSuper:默认
false
- doNotUseGetters:默认
false
也就是会调用 get 方法 - exclude: 默认为空
- includeFieldNames:默认为
true
会打印字段名称 - of:默认为全部字段,即打印全部字段
@EqualsAndHashCode
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
boolean |
callSuper |
调用超类的实现equals ,并hashCode 计算对该类中的字段值。 |
boolean |
doNotUseGetters |
通常情况下,如果getter 是可用的,那么被调用。 |
java.lang.String[] |
exclude |
这里列出的任何字段在生成equals 和hashCode 实现中都不会被考虑在内。 |
java.lang.String[] |
of |
如果存在,则明确列出要用于身份的字段。 |
EqualsAndHashCode.AnyAnnotation[] |
onParam |
这里列出的任何注释都放在的生成的参数equals 和canEqual 。 |
调用示例
@EqualsAndHashCode
public class TestModel {
private int id;
private String trueName;
}
说明:
-
callSuper
:默认false
-
doNotUseGetters
:默认false
也就是会调用 get 方法 -
exclude
:默认为空 -
of
:默认为全部字段 -
onParam
:该注解用以 在传入的Object object
参数注解
@AllArgsConstructor
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
AccessLevel |
access |
设置构造函数的访问级别。 |
AllArgsConstructor.AnyAnnotation[] |
onConstructor |
这里列出的任何注释都放在生成的构造函数中。 |
java.lang.String |
staticName |
如果设置,生成的构造函数将是私有的,并且用包装真实构造函数的相同参数列表生成额外的静态“构造函数”。 |
说明:生成一个全指标构造函数。全参数构造函数需要类中每个字段的一个参数。
@NoArgsConstructor
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
AccessLevel |
access |
设置构造函数的访问级别。 |
boolean |
force |
如果true ,将所有最终字段初始化为0 / null / false。 |
NoArgsConstructor.AnyAnnotation[] |
onConstructor |
这里列出的任何注释都放在生成的构造函数中。 |
java.lang.String |
staticName |
如果设置,生成的构造函数将是私有的,并且用包装真实构造函数的相同参数列表生成额外的静态“构造函数”。 |
说明:生成一个无参数的构造函数。如果由于final
字段的存在而无法写入这样的构造函数,将会生成错误消息。
@RequiredArgsConstructor
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
AccessLevel |
access |
设置构造函数的访问级别。 |
RequiredArgsConstructor.AnyAnnotation[] |
onConstructor |
这里列出的任何注释都放在生成的构造函数中。 |
java.lang.String |
staticName |
如果设置,生成的构造函数将是私有的,并且用包装真实构造函数的相同参数列表生成额外的静态“构造函数”。 |
说明:生成一个具有所需参数的构造函数。必需的参数是final
和约束的字段,如@NonNull
。
@Data
可选元素
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
java.lang.String |
staticConstructor |
如果你指定一个静态构造函数名,那么生成的构造函数将是私有的,而创建一个静态工厂方法,其他类可以用来创建实例。 |
说明:
-
相当于
@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
。 -
为所有字段生成getter,一个有用的toString方法,以及hashCode和equals实现,用于检查所有非瞬态字段。还将为所有非final字段以及构造函数生成setter。
-
staticConstructor
:默认:没有静态构造函数,而是普通的构造函数是公共的。如果你指定一个静态构造函数名,那么生成的构造函数将是私有的,而创建一个静态工厂方法,其他类可以用来创建实例。建议这个名字:“of”,就像这样:public @Data(staticConstructor =“of”)类Point {final int x,y; }
.