Lombok常用注解
val
用于声明类型,将从初始化表达式推断出类型,仅适用于局部变量和foreach循环,而不适用于字段。声明的局部变量为final
变量。
Java自带类型推断随着JDK版本提升越来越好用,这个注解用处不大。
val j = 2;
val map = new HashMap<Integer, String>();
for (val entry : map.entrySet()) {
}
var
var
完全一样val
,除了局部变量没有标记为final
。
可以再次赋值,但是不能赋予不同类型。
用处不大。
@NonNull
使用@NonNull
方法或构造函数的参数让lombok为您生成null-check语句。
注解类字段时,生成的Setter方法和构造器中会执行非空检查。
@Setter
@NonNull
private String name;
public void test1(@NonNull String s1, String s2) {
System.out.println(s1 + s2);
}
@Cleanup
用于局部变量,使用@Cleanup
以确保在代码执行路径退出当前作用域之前自动清除给定资源。
默认情况下,清除方法被假定为close()
。可以指定其他无参方法。
调用清理方法的顺序是声明顺序的倒序。
更推荐使用try-with-resource
语法。
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup CleanupExample cleanupExample1 = new CleanupExample();
@Cleanup("other") CleanupExample cleanupExample2 = new CleanupExample();
@Cleanup InputStream is = new FileInputStream("abc");
}
public static void close() {
System.out.println("close...");
}
public static void other() {
System.out.println("other...");
}
}
@Getter和@Setter
用于类和类字段上,让lombok自动生成默认的 getter / setter。
可以在类上放置@Getter
和/或@Setter
注释。在这种情况下,就像使用注释注释该类中的所有非静态字段一样。对于静态字段,只生成Getter方法。
@Getter(lazy=true)
为 private final
字段生成线程安全的懒加载方法。
@ToString
可以使用@ToString
生成toString()方法的实现来注释任何类定义。默认情况下,它会按顺序打印类名称以及每个字段,并以逗号分隔。
可以通过@ToString
的一些属性控制类中的字段是否打印。
@EqualsAndHashCode
从对象的字段生成hashCode
和equals
实现。
可以通过@EqualsAndHashCode
的一些属性进行控制。
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor
@NoArgsConstructor
:无参构造函数@RequiredArgsConstructor
: 未初始化的final
字段,标记为@NonNull
且未初始化的字段@AllArgsConstructor
:参数为类中的所有字段
@Data
@ToString
, @EqualsAndHashCode
, @Getter
(所有非static字段), @Setter
(非final和static字段),@RequiredArgsConstructor
Value
用于类上。
@Data
的不可变形式。
@Builder
为类生成Builder模式的API。
@Builder.Default
在单字段上设置默认值
@Builder.Default private final long created = System.currentTimeMillis();
@Singular
@Singular
只能应用于lombok已知的集合类型。
lombok将该字段视为集合,并生成2个“加法器”方法而不是Setter方法。
@SneakyThrows
@SneakyThrows
可以用来偷偷抛出已检查的异常而不在方法的throws子句中实际声明这一点。
可以抛出非RuntimeException
及其子类,而不用在方法上声明。
@SneakyThrows
public static void testSneakyThrows() {
throw new Throwable();
}
@Synchronized
用于方法上。
@Synchronized
是synchronized
修饰符的更安全的变体。
@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