20190905 Lombok常用注解

Lombok常用注解

稳定功能

val

只能用于局部变量,声明的局部变量为 final

// 用于局部变量
val j = 2;
val map = new HashMap<Integer, String>();
// 用于for-each
for (val entry : map.entrySet()) {
}

var

varval 基本一样,只能用于局部变量,声明的局部变量不是 final

可以再次赋值,但是不能赋予不同类型

在jdk8中可以用,从jdk10开始,出现了关键字 var ,功能一样,功能被覆盖了

// 用于局部变量,可以修改
var message = "Hello World";
message = "abc";

@NonNull

用于方法参数、构造函数参数、record类型组件

使用@NonNull方法或构造函数的参数让lombok为您生成null-check语句。

注解类字段时,生成的Setter方法和构造器中会执行非空检查。

// 生成的Setter方法中会检查NPE
@Setter
@NonNull
private String name;

// 用于方法参数,会检查NPE
public void test1(@NonNull String s1, String s2) {
    System.out.println(s1 + s2);
}

@Cleanup

用于局部变量

使用try-finally包裹代码,默认执行 close() ,也可以指定其他无参方法

调用清理方法的顺序是声明顺序的倒序

类似 try-with-resource 语法

// 会用try-finally包裹代码,并执行close方法
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);

@Getter和@Setter

用于类和类字段上,让lombok自动生成默认的 getter / setter

配合 AccessLevel 指定方法级别,默认 public

@Getter(lazy=true)

private final 字段生成线程安全的懒加载方法,但是要在定义时指定值

@ToString

生成 toString() 方法

默认情况下,它会按顺序打印类名称以及每个字段,并以逗号分隔

可以通过 @ToString 的一些属性控制字段是否打印

@EqualsAndHashCode

生成 hashCodeequals 方法

@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor

生成构造函数

  • @NoArgsConstructor:无参构造函数
  • @RequiredArgsConstructor: 包含未初始化的final字段、标记为@NonNull且未初始化的字段
  • @AllArgsConstructor:参数为类中的所有字段

@Data

以下注解的组合:

  • @ToString
  • @EqualsAndHashCode
  • @Getter
  • @Setter
  • @RequiredArgsConstructor

@Value

@Value@Data 的不可变的变体

所有字段都是 final

@Builder

为类生成 Builder 模式的 API

@Builder
public class MyData {
    private String s1;
    private String s2;
    private int i1;

    public static void main(String[] args) {
        MyDataBuilder builder = MyData.builder();
        MyData myData = builder.s1("s1").s2("s2").i1(1).build();
    }
}

@Builder.Default

为字段设置默认值

@Builder.Default
private long created = System.currentTimeMillis();

@Singular

配合 @Builder 使用,应用在集合字段上

字段名称必须是复数形式(一般带s,例如names),否则会报错

会为 Builder 类生成三个方法:

  • dress:add 单个
  • dresses:addAll 多个
  • clearDresses:clear 集合

@SneakyThrows

@SneakyThrows 帮助避免在方法声明中添加 throws 子句,但是被包裹的方法抛出的异常不会有任何改变

@SneakyThrows
public void run() {
throw new Throwable();
}

@Synchronized

用于方法上

@Synchronizedsynchronized 修饰符的更安全的变体。它的操作与synchronized关键字类似,但它锁定的对象不同。关键字锁定的是这个对象,但注解锁定的是一个名为\(lock的字段,它是私有的。如果这个字段不存在,它就会为你创建。如果你注释了一个静态方法,注释会锁定一个名为\)LOCK的静态字段。

@With

用于字段上

新增一个方法 withFieldName(newValue) 方法,它产生一个除了相关字段的新值以外的克隆

日志注解

日志记录器被命名为 log ,字段的类型取决于你所选择的记录器。

注解 类型
@CommonsLog org.apache.commons.logging.Log
@Flogger com.google.common.flogger.FluentLogger
@JBossLog org.jboss.logging.Logger
@Log java.util.logging.Logger
@Log4j org.apache.log4j.Logger
@Log4j2 org.apache.logging.log4j.Logger
@Slf4j org.slf4j.Logger
@XSlf4j org.slf4j.ext.XLogger

参考资料

posted @ 2019-09-05 19:47  流星<。)#)))≦  阅读(553)  评论(0编辑  收藏  举报