lombok介绍

lombok是一个开源的代码生成库,能以简单的注解形式来简化Java类中的大量样板代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量。lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法,使代码看起来更简洁。

lombok对应的maven坐标:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>

lombok常用注解

注解说明
@Setter注解在类或属性,注解在类时为所有属性生成setter方法,注解在属性上时只为该属性生成setter方法
@Getter使用方法同@Setter,区别在于生成的是getter方法
@ToString注解在类,添加toString方法
@EqualsAndHashCode注解在类,生成hashCode和equals方法
@NoArgsConstructor注解在类,生成无参的构造方法
@RequiredArgsConstructor注解在类,为类中需要特殊处理的属性生成构造方法,比如final和被@NonNull注解的属性
@AllArgsConstructor注解在类,生成包含类中所有属性的构造方法
@Data注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法
@Slf4j注解在类,生成log变量,用于记录日志
@Builder将类转变为建造者模式

lombok 实战

创建用户类
package com.example.pojo;
import lombok.*;
import lombok.extern.slf4j.Slf4j;

@Setter //创建所有字段的Set方法
@Getter //创建所有字段的Get方法
@NoArgsConstructor //创建无参构造方法
@AllArgsConstructor //创建全参构造方法
@ToString   //重写ToString方法
@Builder  //开启使用建造者模式创建对象
public class User {
    String id;
    //@Setter 创建usernae字段的Set方法
    String username;
    int age;
}

也可以使用@Data注解替代,但是构造方法无法替代:

package com.example.pojo;
import lombok.*;
import lombok.extern.slf4j.Slf4j;

@Data  // 创建setter、getter、equals、canEqual、hashCode、toString方法
@NoArgsConstructor //创建无参构造方法
@AllArgsConstructor //创建全参构造方法 
public class User {
    String id;
    //@Setter 创建usernae字段的Set方法
    String username;
    int age;
}
建造者模式
// 等价于
//User jay = new User();
//jay.setAge(23);
//jay.setId("10082");
//jay.setUsername("jay");

User jay = User.builder()
        .age(23)
        .id("10082")
        .username("Jay")
        .build();

使用@Builder实际上会在User中加入下面的代码,使用静态内部类的方式提供方法接受外部的值:

public class User {
    String id;
    String username;
    int age;
    public static UserBuilder builder(){
        return new UserBuilder();
    }
    public static class UserBuilder{
        private  String id;
        private String username;
        private int age;
        public UserBuilder id(String id){
            this.id = id;
            return this;
        }
        public UserBuilder username(String username){
            this.username = username;
            return this;
        } 
        public UserBuilder age(int age){
            this.age = age;
            return this;
        }
    }
}
总结
  • 使用 lombok 插件可以节省大量劳动力代码;
  • 可以很方便使用建造者模式;
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐