lombok学习笔记

参考缓慢移动的蜗牛
lombok官网

@Cleanup注解

字如其名,就是lombok自动帮我做清理工作,当需要调用的资源默认有colse()方法,则直接调用,也可以手动指定清理方法; 需要注意的一点是该注解只适用于清理资源的方法是无参数的!(有参数的清理方法比如clean(xxx,…)无法利用该注解)

手动指定清理方法名称
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);


注解使用例子
public class CleanupExample {
  public static void main(String[] args) throws IOException {
    @Cleanup InputStream in = new FileInputStream(args[0]);
    @Cleanup OutputStream out = new FileOutputStream(args[1]);
    byte[] b = new byte[10000];
    while (true) {
      int r = in.read(b);
      if (r == -1) break;
      out.write(b, 0, r);
    }
  }
}

@NonNull

Lombok帮我们生成参数是否为空的测试语句,免得我们自己判断
java源码
public class NonNullExample extends Something {
  private String name;

  public NonNullExample(@NonNull Person person) {
    super("Hello");
    this.name = person.getName();
  }
}

底层java class文件
public class NonNullExample extends Something {
  private String name;

  public NonNullExample(@NonNull Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person is marked @NonNull but is null");
    }
    this.name = person.getName();
  }
}

@Getter、@Setter注解

除非明确指定AccessLevel,否则生成的getter / setter方法将是公共的,
还可以在类上放置@Getter和/或@Setter注释。 
在这种情况下,就像使用注释注释该类中的所有**非静态字段一样** 
最后还可以设置设置getter/setter方法的权限,甚至特定field不生成@getter/@setter方法

@Getter
@Setter
public class Address {
    @Setter(AccessLevel.NONE)
    private String city;

    @Getter(AccessLevel.PRIVATE)
    private String province;
    private String name;
}

class文件,city没有setter方法,provice 的getter方法为private权限
public class Address {
    private String city;
    private String province;
    private String name;

    private String getProvince() {
        return this.province;
    }

    public String getCity() {
        return this.city;
    }

    public String getName() {
        return this.name;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@EqualsAndHashCode

lombok建议我们当子类继承父类时,为子类生成注解 @EqualsAndHashCode时,可以通过设置callSuper=true属性避免出现错误(前提示父类也是lombok注解的),
还可以@EqualsAndHashCode.Include or @EqualsAndHashCode.Exclude 来制定哪些字段生成 equals() and hashcode()方法

@ToString

默认情况下打印非静态字段,如果要跳过某些字段,可以使用@ToString.Exclude注释这些字段。
或者,您可以使用@ToString(onlyExplicitlyIncluded = true)准确指定要使用的字段,然后使用@ ToString.Include标记要包含的每个字段。

@Getter
@Setter
@ToString(onlyExplicitlyIncluded=true)
public class Address {
    @Setter(AccessLevel.NONE)
    private String city;

    @Getter(AccessLevel.PRIVATE)
    private String province;

    @ToString.Include
    private String name;


}

---

public class Address {
    private String city;
    private String province;
    private String name;

    private String getProvince() {
        return this.province;
    }

    public String getCity() {
        return this.city;
    }

    public String getName() {
        return this.name;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return "Address(name=" + this.getName() + ")";
    }
}

toString方法甚至可以输出方法的结果

@Getter
@Setter
@ToString(onlyExplicitlyIncluded=true)
public class Address {
    @Setter(AccessLevel.NONE)
    private String city;

    @Getter(AccessLevel.PRIVATE)
    private String province;

    @ToString.Include
    private String name;

    @ToString.Include
    public String say() {
        return "haha";
    }

}

结果:
    public String toString() {
        return "Address(name=" + this.getName() + ", say=" + this.say() + ")";
    }

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

@NoArgsConstructor将生成一个没有参数的构造函数。若final字段没有初始化,将导致编译器错误,除非使用@NoArgsConstructor(force = true),然后使用0 / false / null初始化所有final字段。对于具有约束的字段,例如@NonNull字段,不会生成任何检查,即代码里没有not null-check

@RequiredArgsConstructor为每个需要特殊处理的字段生成一个带有1个参数的构造函数。 所有未初始化的final字段都会获得一个参数,以及标记为@NonNull的任何字段(这些字段在声明它们时未初始化),所以说构造器的参数个数不定,取决于你的filed属性是否特殊。 对于标有@NonNull的字段,还会生成显式空检查。 

@AllArgsConstructor 生成所有参数的构造器

@Accessors

@Accessors 主要用于控制生成的getter和setter
主要参数介绍


fluent boolean值,默认为false。此字段主要为控制生成的getter和setter方法前面是否带get/set
chain boolean值,默认false。如果设置为true,setter返回的是此对象,方便链式调用方法
prefix 设置前缀 例如:@Accessors(prefix = "abc") private String abcAge 当生成get/set方法时,会把此前缀去掉

当设置@Accessors(fluent=false,chain=true)
    public String getName() {
        return this.name;
    }

    public Address setProvince(String province) {
        this.province = province;
        return this;
    }

    public Address setName(String name) {
        this.name = name;
        return this;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值