Lombok注解
@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
作用:建造者模式生成对象;
标注点:常见于类上,也可方法和构造器;