美文网首页
Lombok注解

Lombok注解

作者: 扎Zn了老Fe | 来源:发表于2020-10-11 17:21 被阅读0次

    @NonNull

    作用:判断是否为空,为空自动抛出空指针异常。
    标注点:方法或者构造器的参数上。
    示例:

    import lombok.NonNull;
    
    public class NonNullExample extends Something {
      private String name;
      
      public NonNullExample(@NonNull Person person) {
        this.name = person.getName();
      }
    }
    

    编译后为

    import lombok.NonNull;
    
    public class NonNullExample extends Something {
      private String name;
      
      public NonNullExample(@NonNull Person person) {
        if (person == null) {
          throw new NullPointerException("person is marked @NonNull but is null");
        }
        this.name = person.getName();
      }
    }
    

    @Getter和@Setter

    作用:用于自动生成get、set方法。Boolean类型为is开头。
    标注点:字段或者类上面。作用类上面自动生成非静态字段的get和set方法。

    @ToString

    作用:用于生成toString()方法。
    配置项:

    • includeFieldNames,默认为true,表示在toString输出时输出字段名称。
    • callSuper,默认为false,表示生成toString时不输出超类中的字段内容,若要输出超类中的内容,需要设置为true
    • doNotUseGetters,默认为false,表示获取字段值时通过get方法获取,设置为true表示直接通过字段获取
    • onlyExplicitlyIncluded,默认为false,表示输出所有非静态字段内容,如果设置为true,则只输出标注有@ToString.Include的字段和方法。
      标注点:类上面
      示例:
    import lombok.ToString;
    
    @ToString
    public class ToStringExample {
      private static final int STATIC_VAR = 10;
      private String name;
      private Shape shape = new Square(5, 10);
      private String[] tags;
      @ToString.Exclude private int id;
      
      public String getName() {
        return this.name;
      }
      
      @ToString(callSuper=true, includeFieldNames=true)
      public static class Square extends Shape {
        private final int width, height;
        
        public Square(int width, int height) {
          this.width = width;
          this.height = height;
        }
      }
    }
    

    编译后为

    import java.util.Arrays;
    
    public class ToStringExample {
      private static final int STATIC_VAR = 10;
      private String name;
      private Shape shape = new Square(5, 10);
      private String[] tags;
      private int id;
      
      public String getName() {
        return this.name;
      }
      
      public static class Square extends Shape {
        private final int width, height;
        
        public Square(int width, int height) {
          this.width = width;
          this.height = height;
        }
        
        @Override public String toString() {
          return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
        }
      }
      
      @Override public String toString() {
        return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
      }
    }
    

    @ToString.Include

    作用:toString方法会默认忽略掉命名为$开头的变量。该注解表示生成toString方法时包含该注解标注的字段和方法,需要与onlyExplicitlyIncluded一起使用。
    标注点:字段或者方法。方法是无参、非静态类型。

    @ToString.Exclude

    作用:表示生成toString方法时不包含被该注解标注的字段。那么生成toString方法时会跳过这些字段,
    标注点:字段。

    @EqualsAndHashCode

    作用:生成hastcode和equals方法
    配置项:

    • callSuper,默认为false,表示生成toString时不输出超类中的字段内容,若要输出超类中的内容,需要设置为true
    • doNotUseGetters,默认为false,表示获取字段值时通过get方法获取,设置为true表示直接通过字段获取
      标注点:类
      示例
    import lombok.EqualsAndHashCode;
    
    @EqualsAndHashCode
    public class EqualsAndHashCodeExample {
      private transient int transientVar = 10;
      private String name;
      private double score;
      @EqualsAndHashCode.Exclude private Shape shape = new Square(5, 10);
      private String[] tags;
      @EqualsAndHashCode.Exclude private int id;
      
      public String getName() {
        return this.name;
      }
      
      @EqualsAndHashCode(callSuper=true)
      public static class Square extends Shape {
        private final int width, height;
        
        public Square(int width, int height) {
          this.width = width;
          this.height = height;
        }
      }
    }
    

    编译后

    import java.util.Arrays;
    
    public class EqualsAndHashCodeExample {
      private transient int transientVar = 10;
      private String name;
      private double score;
      private Shape shape = new Square(5, 10);
      private String[] tags;
      private int id;
      
      public String getName() {
        return this.name;
      }
      
      @Override public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof EqualsAndHashCodeExample)) return false;
        EqualsAndHashCodeExample other = (EqualsAndHashCodeExample) o;
        if (!other.canEqual((Object)this)) return false;
        if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
        if (Double.compare(this.score, other.score) != 0) return false;
        if (!Arrays.deepEquals(this.tags, other.tags)) return false;
        return true;
      }
      
      @Override public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final long temp1 = Double.doubleToLongBits(this.score);
        result = (result*PRIME) + (this.name == null ? 43 : this.name.hashCode());
        result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
        result = (result*PRIME) + Arrays.deepHashCode(this.tags);
        return result;
      }
      
      protected boolean canEqual(Object other) {
        return other instanceof EqualsAndHashCodeExample;
      }
      
      public static class Square extends Shape {
        private final int width, height;
        
        public Square(int width, int height) {
          this.width = width;
          this.height = height;
        }
        
        @Override public boolean equals(Object o) {
          if (o == this) return true;
          if (!(o instanceof Square)) return false;
          Square other = (Square) o;
          if (!other.canEqual((Object)this)) return false;
          if (!super.equals(o)) return false;
          if (this.width != other.width) return false;
          if (this.height != other.height) return false;
          return true;
        }
        
        @Override public int hashCode() {
          final int PRIME = 59;
          int result = 1;
          result = (result*PRIME) + super.hashCode();
          result = (result*PRIME) + this.width;
          result = (result*PRIME) + this.height;
          return result;
        }
        
        protected boolean canEqual(Object other) {
          return other instanceof Square;
        }
      }
    }
    

    @EqualsAndHashCode.Include

    作用:需要与onlyExplicitlyIncluded配合使用,表示将该注解标注的内容添加到实现hashCode和equals方法的内容中去。
    标注点:字段或者方法之上,

    @EqualsAndHashCode.Exclude

    作用:用于排除不需要参与生成hashCode和equals方法的字段。可单独使用。
    标注点:字段。

    @NoArgsConstructor, @RequiredArgsConstructor,@AllArgsConstructor

    @NoArgsConstructor
    作用:用于生成无参构造器,如果类中存在final字段,则会报编译错误。一般结合其他几个构造器注解一起使用提供一个无参构造器,并且不会检查@NonNull标注的字段。
    标注点:类。

    @AllArgsConstructor
    作用:用于生成包含所有字段的构造器。@NonNull字段会进行null判断检查。
    标注点:类

    @RequiredArgsConstructor
    作用:生成单参数的构造器。包含final字段和类似于@NonNull约束标注的字段,会对@NonNull字段进行明确的null检查。
    标注点:类

    access,同上
    标注点:类

    @Data

    作用:@ToString,@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor综合体。
    标注点:类

    @Builder

    作用:建造者模式生成对象;
    标注点:常见于类上,也可方法和构造器;

    参考:
    [1]. https://projectlombok.org/features/all

    相关文章

      网友评论

          本文标题:Lombok注解

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