@NoArgsConstructor, @RequiredArg

作者: github加星点进来 | 来源:发表于2017-07-17 15:05 被阅读3063次

在Lombok中,生成构造方法的annotation一共有三个,@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsContructor。使用这三个annotation来完成项目中对于不同构造方法的需求。

@NoArgsConstructor : 生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。

@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。

@AllArgsContructor: 会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验, 我们来看一下官方给出的一个例子:

使用了lombok

import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;

@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
  private int x, y;
  @NonNull private T description;

  @NoArgsConstructor
  public static class NoArgsExample {
    @NonNull private String field;
  }
}

未使用lombok

 public class ConstructorExample<T> {
  private int x, y;
  @NonNull private T description;

  private ConstructorExample(T description) {
    if (description == null) throw new NullPointerException("description");
    this.description = description;
  }

  public static <T> ConstructorExample<T> of(T description) {
    return new ConstructorExample<T>(description);
  }

  @java.beans.ConstructorProperties({"x", "y", "description"})
  protected ConstructorExample(int x, int y, T description) {
    if (description == null) throw new NullPointerException("description");
    this.x = x;
    this.y = y;
    this.description = description;
  }

  public static class NoArgsExample {
    @NonNull private String field;

    public NoArgsExample() {
    }
  }
}

@AllArgsConstructor 在生成的构造函数上会生成一@ConstructorProperties 的Java annotation, 当然也可以通过将suppressConstructorProperties 设置为true来禁用@ConstructorProperties 。 如果你知道@ConstructorProperties 是干什么用的,那么一定就知道@NoArgsConstructor为什么没有这个配置参数了。

提示一点:@ConstructorProperties 只能用在JDK 6 中

相关文章

  • @NoArgsConstructor, @RequiredArg

    在Lombok中,生成构造方法的annotation一共有三个,@NoArgsConstructor, @Requ...

  • @NoArgsConstructor, @RequiredArg

    @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsCon...

  • lombook

    lombok@NoArgsConstructor@AllArgsConstructor@Builder

  • lombok用法

    @Data @AllArgsConstructor @NoArgsConstructor @Setter @Get...

  • 第二章 Lombok框架

    常用注解@Data@Getter@Setter@NoArgsConstructor@AllArgsConstruc...

  • lombok插件简记

    @Builder和@NoArgsConstructor同时使用时会报错 两个同时使用时需要加上@AllArgsCo...

  • 2019-04-29 工作中遇到问题记录

    lombok问题 @Builder和@NoArgsConstructor同时使用时会报错 两个同时使用时需要加上@...

  • lombok插件

    在哪里用?--实体类注解 @NoArgsConstructor:添加一个无参的构造方法注解 @AllArgsCon...

  • 无参构造器

    1、子类没有构造函数时,自动调用父类的无参构造函数 运行结果:Animal NoArgsConstructor 2...

网友评论

    本文标题:@NoArgsConstructor, @RequiredArg

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