Lombok

Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。

Lombok的使用跟引用jar包一样,可以在官网(https://projectlombok.org/download)下载jar包,也可以使用maven添加依赖:

    org.projectlombok

    lombok

    1.16.20

    provided

(1)@Data

@Data注解在类上,集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@Data public class DataExample {}

(2)@Getter/@Setter

  @Getter @Setter private int age = 10;

  @Setter(AccessLevel.PROTECTED) private String name;

  相当于:

  private int age = 10;

  private String name;

  public int getAge() {

    return age;

  }

  public void setAge(int age) {

    this.age = age;

  }

  protected void setName(String name) {

    this.name = name;

  }

(3)@NonNull (同@NotEmpty)

  public NonNullExample(@NonNull Person person) {

    super("Hello");

    this.name = person.getName();

  }

相当于

public NonNullExample( Person person) {

    super("Hello");

    if (person == null) {

      throw new NullPointerException("person");

    }

    this.name = person.getName();

  }

(4)@ToString

类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。

@ToString(exclude="id")

public class ToStringExample {}

(5)@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

1) 无参构造器使用lombok提供的构造器注解@NoArgsConstructor

@NoArgsConstructor

public class AnnoNoArgConstructor {

    private String id;

    private String name;

}

相当于

public class NoArgConstructorN {

    private String id;

    private String name;

    public NoArgConstructorN() {

    }

}

2) 全参构造器使用lombok提供的构造器注解@AllArgsConstructor

@AllArgsConstructor

public class AnnoAllArgConstructor {

    private String id;

    private String name;

}

相当于

public class AllArgConstructorN {

    private String id;

    private String name;

    public AllArgConstructorN(String id, String name) {

        this.id = id;

        this.name = name;

    }

}

3) 必要参数构造器使用lombok的@RequiredArgsConstructor注解,为所有必要的 final 和 @NonNull 修饰的属性生成一个构造方法。

@RequiredArgsConstructor()

public class AnnoReqArgConstructor {

    // 既然要求NonNull,那么在构造时必须提供且一定非空

    @NonNull

    private final String id;

    private String name;

    private String desc;

}

相当于

public class ReqArgConstructorN {

    private final String id;

    private String name;

    private String desc;

    public ReqArgConstructorN(String id) {

        if (id == null) {

            throw new NullPointerException("id");

        } else {

            this.id = id;

        }

    }

}

(6)@Size(max, min)  @Min(value) @Max(value) @DecimalMin(value) @DecimalMax(value) @Digits(integer, fraction) 限制范围

// 字符串nam的长度为10到20之间。

    @Size(min = 10, max = 20)

    private String name;

// 数组args的长度为10到Integer.MAX_VALUE之间

// 不给出max,默认为Integer.MAX_VALUE

    @Size(min = 10)

    private String[] args;

// 列表list的长度为0到100

// 不给出min,默认为0

    @Size(max = 100)

    private List list;

// cost的最大值为1000

    @Max(1000)

    private int cost;

// 支持浮点数,cost的最小值为1000.5,注意:浮点型优先使用String构造方法@DecimalMin("1000.5")而不是@DecimalMin(1000.5)

    @DecimalMin("1000.5")

    private BigDecimal cost;

// num的整数位数不超过5,小数位数不超过2

    @Digits(integer = 5, fraction = 2)

    private String num;

你可能感兴趣的:(Lombok)