概述
Lombok是一个Java库,它通过注解来简化Java类的编写,减少了冗余的代码,提高了开发效率。Lombok可以帮助我们在编译时自动生成一些常用的方法,如getter、setter、toString、equals等,同时还支持更多功能,如@Data注解可以自动生成所有常用的方法,@NoArgsConstructor可以自动生成无参构造函数等。
@Getter和@Setter
使用@Getter注解在类上,可以为所有非静态字段自动生成getter方法。
使用@Setter注解在类上,可以为所有非静态字段自动生成setter方法。
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
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;
}
}
@ToString
使用@ToString注解在类上,可以自动生成toString方法。
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person(name=" + name + ", age=" + age + ")";
}
}
@EqualsAndHashCode
使用@EqualsAndHashCode注解在类上,可以自动生成equals和hashCode方法。
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
@Data
使用@Data注解在类上,可以自动生成所有常用的方法,包括@Getter、@Setter、@ToString、@EqualsAndHashCode。
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
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;
}
@Override
public String toString() {
return "Person(name=" + name + ", age=" + age + ")";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
@NoArgsConstructor和@AllArgsConstructor
使用@NoArgsConstructor注解在类上,可以自动生成无参构造函数。
使用@AllArgsConstructor注解在类上,可以自动生成包含所有字段的构造函数。
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
@RequiredArgsConstructor
使用@RequiredArgsConstructor注解在类上,可以自动生成包含final字段的构造函数。
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Person {
private final String name;
private final int age;
}
// 自动生成的代码相当于
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
@Builder
使用@Builder注解在类上,可以自动生成Builder模式的构造方法。
import lombok.Builder;
@Builder
public class Person {
private String name;
private int age;
}
// 自动生成的代码相当于
public class Person {
private String name;
private int age;
private Person(String name, int age) {
this.name = name;
this.age = age;
}
public static PersonBuilder builder() {
return new PersonBuilder();
}
public static class PersonBuilder {
private String name;
private int age;
private PersonBuilder() {
}
public PersonBuilder name(String name) {
this.name = name;
return this;
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public Person build() {
return new Person(name, age);
}
}
}