20190905 Lombok常用注解
Lombok常用注解
稳定功能
val
只能用于局部变量,声明的局部变量为 final
// 用于局部变量
val j = 2;
val map = new HashMap<Integer, String>();
// 用于for-each
for (val entry : map.entrySet()) {
}
var
var
和 val
基本一样,只能用于局部变量,声明的局部变量不是 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
生成 hashCode
和 equals
方法
@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
用于方法上
@Synchronized
是 synchronized
修饰符的更安全的变体。它的操作与synchronized关键字类似,但它锁定的对象不同。关键字锁定的是这个对象,但注解锁定的是一个名为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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2017-09-05 程序员你为什么这么累?