Lombok

概述

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);
        }
    }
}
赞赏