原文:https://blog.csdn.net/weixin_41540822/article/details/86606535
常用注解示例:Lombok常用注解 - 草木物语 - 博客园
org.projectlombok
lombok
1.18.12
使用范围:类上、类中字段上,让lombok
自动生成默认的getter/setter
。
包装类型的Boolean 字段 flag, 生成的getter方法仍然是getFlag(),
基本数据类型boolean 字段 updateFlag,生成的getter方法为:isUpdateFlag()
作用在类上:
package com.example.entity;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Consumer {
private String name;
private int age;
private Boolean flag;
private boolean updateFlag;
}
// 编译后
public class Consumer {
private String name;
private int age;
private Boolean flag;
private boolean updateFlag;
public Consumer() { }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public Boolean getFlag() { return flag; }
public void setFlag(Boolean flag) { this.flag = flag; }
public boolean isUpdateFlag() { return updateFlag; }
public void setUpdateFlag(boolean updateFlag) { this.updateFlag = updateFlag; }
}
AccessLevel
精确定义访问权限lombok生成的getter / setter方法默认是 public的。在Java中合法访问级别为PUBLIC,PROTECTED,PACKAGE和PRIVATE,AccessLevel是有一个枚举类型,主要定义访问权限,如下所示:
public enum AccessLevel {
PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE,
/** Represents not generating anything or the complete lack of a method. */
NONE;
}
使用AccessLevel来定义方法的访问权限,可以有两种方式:
1、在类上的@Getter 、@Setter中添加value = AccessLevel.PRIVATE,那么则会应用到类中的所有属性上;
2、在类中属性上的@Getter、 @Setter中添加value = AccessLevel.PRIVATE,那么会覆盖在类上添加的权限控制。
在类
AccessLevel
中会看到AccessLevel.NONE
,可以使用AccessLevel.NONE
来定义字段的访问级别,意思是采用手动方式禁止此字段的getter / setter
生成。 这个操作可以覆盖类上的@Getter
,@Setter
或@Data
注释的行为。
示例:
@Getter
@Setter(value = AccessLevel.PRIVATE)
public class Consumer2 {
@Setter(value = AccessLevel.PUBLIC) // 测试在属性上定义会覆盖在类上的定义
private String name;
@Getter(value = AccessLevel.PRIVATE)
private int age;
private Boolean flag;
private boolean updateFlag;
}
// 编译后
public class Consumer {
private String name;
private int age;
private Boolean flag;
private boolean updateFlag;
public Consumer2() {
}
public String getName() {
return this.name;
}
public Boolean getFlag() {
return this.flag;
}
public boolean isUpdateFlag() {
return this.updateFlag;
}
private void setAge(final int age) {
this.age = age;
}
private void setFlag(final Boolean flag) {
this.flag = flag;
}
private void setUpdateFlag(final boolean updateFlag) {
this.updateFlag = updateFlag;
}
public void setName(final String name) {
this.name = name;
}
private int getAge() {
return this.age;
}
}
注:使用lombok.config时,lombok需要lombok 1.14+
我们可以使用配置文件lombok.config来定制Lombok,通过配置我们可以使用Lombok的功能,比如链式调用。可以将lombok.config的配置文件放到任意位置,lombok.config的作用范围是所在当前位置目录及子目录。出于规范,建议放在根目录或者src目录下。
如果在当前目录的子目录中还存在一个lombok.config
配置文件,那么对于子目录中的的实体类会优先选择使用子目录中的配置,而当前目录(父目录)下的相同的的配置项会被子目录下的配置覆盖掉。
配置文件:
# 禁止生成以 set/get/is 为前缀的方法,以字段名为方法名。
lombok.accessors.fluent = [true | false] (default: false)
# 在生成的get/set/is 方法名中,添加前缀(或去掉字段中的某些前缀),eg:getPerfixFoo(),
lombok.accessors.prefix += a field prefix (default: empty list)
# 禁止生成 is 为前缀的方法
lombok.getter.noIsPrefix = [true | false] (default: false)
# 禁止使用 @Setter
lombok.setter.flagUsage = [warning | error] (default: not set)
# 禁止使用 @Getter
lombok.getter.flagUsage = [warning | error] (default: not set)
# 复制可以使用的注解:e.g. @Nullable/@NonNull annotations
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)
@Data注解在类上,将类提供的所有属性都添加get、set方法,并添加equals、canEquals、hashCode、toString方法
@Value注解用于修饰类,相当于是@Data的不可变形式,因为字段都被修饰为private和final,默认的情况下不会生成settter。还有一点更狠的,默认类本身也是final的,不能被继承。
详细说明: https://blog.csdn.net/weixin_41540822/article/details/86606535
@NoArgsConstructor
在类上使用,它可以提供一个无参构造器。
@AllArgsConstructor
同样是在类上使用,该注解提供一个全参数的构造方法,默认不提供无参构造。需要注意的是,这里的全参不包括已初始化的final字段(主要是final
字段,一旦被赋值不允许再被修改)。
@RequiredArgsConstructor
也是在类上使用,但是这个注解可以生成带参的构造方法。只能是类中所有带有@NonNull
注解的和以final
修饰的未经初始化的字段
详细说明 : https://blog.csdn.net/weixin_41540822/article/details/86606513
添加一个toString方法
不能为空,否则抛出空指针异常