Lombok

作者: shelhuang | 来源:发表于2020-01-12 11:20 被阅读0次

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

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

    <dependency>

        <groupId>org.projectlombok</groupId>

        <artifactId>lombok</artifactId>

        <version>1.16.20</version>

        <scope>provided</scope>

    </dependency>

    (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<String> 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

          本文链接:https://www.haomeiwen.com/subject/naipoctx.html