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关键字类似,但它锁定的对象不同。关键字锁定的是这个对象,但注解锁定的是一个名为lockLOCK的静态字段。

@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 @   流星<。)#)))≦  阅读(570)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2017-09-05 程序员你为什么这么累?
点击右上角即可分享
微信分享提示