Lombok一句话介绍:省去很多繁琐的 “样板代码” 编码工作。
例:Getter、Setter以及构造方法任何Bean中都不可获取,但是创建Bean时添加他们是繁琐的!
public class People {
private String name;
/**
* Getter Setter 构造方法任何Bean中都不可获取,但是创建Bean时添加他们是繁琐的!
*/
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public People(String name, int age, String sex) {
this.name = name;
}
public People() {}
}
@Getter、@Setter
自动在 Java 类中生成 getter 和 setter 方法。
1、如何使用
- 需要getter 和 setter 方法的地方添加,可以在类或者字段上加上这两个注解,Lombok 就会自动为你生成 getter 和 setter 方法。
- 如果只为某个特定的字段生成 getter 或者 setter 方法,直接将注解加到字段上。
- Lombok 还允许你自定义生成的 getter 和 setter 方法的访问级别,如:@Getter(AccessLevel.PROTECTED),这样 getter 方法就会被设置为 protected,而 setter 方法则仍然是 public。
2、代码示例
例:
@Getter
@Setter
public class People {
private String name;
private int age;
private String sex;
}
编译后:自动生成了getter 和 setter 方法。
@ToSrting
自动在 Java 类中生成 toString 方法。
1、如何使用
- 类上添加这个注解,Lombok 就会自动为你生成 toString 方法。
- Lombok 为 @ToString 提供了一些选项,让你可以进一步自定义生成的 toString 方法。
includeFieldNames:是否在输出中包含字段名,默认为 true。
exclude:排除某些字段,不在 toString 的输出中显示。
callSuper:是否调用超类的 toString 方法,默认为 false。
of:要在 toString 的输出中显示的字段。
2、代码示例
例:
@ToString(includeFieldNames = true, callSuper = true,exclude = {"sex"})
public class People {
private String name;
private int age;
private String sex;
}
编译后:includeFieldNames = true 所以有字段名,callSuper = true 所以调用了super的toString方法,exclude = {“sex”} 所以toString中没有sex属性。(另外of的优先级大于exclude,如果你写exclude = {“sex”},of={“sex”},那么仅有sex会出现的toString中)
@EqualsAndHashCode
自动在 Java 类中生成 Equals和HashCode方法。
用于比较对象的相等性和生成对象的哈希码。
1、如何使用
- 类上添加这个注解,Lombok 就会自动为你生成 equals 和 hashCode 方法。
- Lombok 提供了一些选项,让你可以自定义 equals 和 hashCode 方法的行为,与@ToString类似。
doNotUseGetters:是否直接使用字段值而非调用 getter 方法,默认为 false。
callSuper:是否在 equals 和 hashCode 方法中调用超类的方法,默认为 false。
exclude:排除某些字段,不在 equals 和 hashCode 方法中使用。
of:明确要在 equals 和 hashCode 方法中使用的字段。
2、代码示例
例:
@EqualsAndHashCode(exclude = "age")
public class People {
private String name;
private int age;
private String sex;
}
编译后:
@Constructor
自动在 Java 类中生成 构造方法。
并没有@Constructor注解,Lombok实现自动生成注解为以下三个@NoArgsConstructor,@RequiredArgsConstructor 和 @AllArgsConstructor,这里@Constructor仅做指代。
- @NoArgsConstructor:这个注解会让 Lombok 为你的类生成一个无参数的构造方法。非常简单,对吧?
- @RequiredArgsConstructor:这个注解稍微复杂一些,它会让 Lombok 为你的类生成一个构造方法,构造方法的参数是类中所有需要特殊处理的字段,也就是说,标记为 final 和 @NonNull (此注解会在后面提到) 的字段会被作为参数。
- @AllArgsConstructor:这个注解会让 Lombok 为你的类生成一个包含所有字段的构造方法。
1、如何使用
- 类上添加这些注解,Lombok 就会按照要求生成相应的构造方法。
- Lombok 提供了一些选项,让你可以自定义构造方法的行为。
@NoArgsConstructor(force = true):当有 final 字段没有被初始化时,这个选项可以强制 Lombok 生成一个无参数的构造方法,并将所有 final 字段初始化为其默认值(0、false、null等)。
@AllArgsConstructor(access = AccessLevel.PROTECTED):这个选项可以用来改变生成的构造方法的访问级别。
@RequiredArgsConstructor(staticName = “of”):这个选项可以让 Lombok 为你生成一个静态的工厂方法,而不是一个构造方法。
2、代码示例
例:
@AllArgsConstructor
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
public class People {
private String name;
private final int age;
private String sex;
}
编译后:分别生成有参、无参以及标记为 final 的参数构造方法,并且age是final不能存在有参构造方法,配置为@NoArgsConstructor(force = true)会为其赋默认值。