Lombok注解

2020-10-11  本文已影响0人  扎Zn了老Fe

@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()方法。
配置项:

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方法
配置项:

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

上一篇下一篇

猜你喜欢

热点阅读