lombok注解
val
局部变量可以使用这个val,会自动加上final修饰符
@NonNull
加上这个注解,会检查这个参数,如果不符合,会报空指针
public static void main(String[] args) {
System.out.println(returnString(null));
System.out.println(returnString("not_Null"));
}
public static String returnString(@NonNull String param) {
return "abc";
}
@Cleanup
能够自动关闭流对象
@Cleanup InputStream in = new FileInputStream("");
@Cleanup OutputStream out = new FileOutputStream("");
@Value
@Value注解用于修饰类,相当于是@Data的不可变形式,因为字段都被修饰为private和final,默认的情况下不会生成settter。还有一点更狠的,默认类本身也是final的,不能被继承。
Builder
Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。
Student.builder()
.sno( "001" )
.sname( "admin" )
.sage( 18 )
.sphone( "110" )
.build();
SneakyThrows
大部分情况下的异常,我们都是一路往外抛了事。Lombok的@SneakyThrows就是为了消除这样的模板代码。
try{
}catch(Exception e){
throw new RuntimeException(e);
}
with
对于不可变属性的setter,下一个最好的替代方法是构造对象的克隆,但是为这个字段提供一个新值。生成此克隆的方法正是@With生成的方法:一个withFieldName(newValue)方法,它生成一个克隆,但关联字段的新值除外。
说白就,就是不可变的属性,不能修改,那我想修改怎么办呢?只能创建一个新的对象,对新的对象进行修改了
@Getter(lazy=true)
您可以让lombok生成一个getter,它将在第一次调用这个getter时计算一次值,并从那时起缓存它。如果计算该值需要大量CPU或内存,这将非常有用。要使用此功能,请创建一个私有final变量,使用运行开销较大的表达式初始化它,并使用@Getter(lazy=true)注释字段。
该字段将对代码的其余部分隐藏,并且在第一次调用getter时,表达式的计算不会超过一次。没有魔标记值(即,即使昂贵计算的结果为null,结果也会被缓存),而且昂贵计算不需要是线程安全的,因为lombok负责锁定。
说实话,这个地方还是不是特别懂,还是多看 官网
log
@Log
java本身的日志打印
例子:
@Log
public class LogExample {
}
将产生:
public class LogExample {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
}
@Slf4j
例子:
@Slf4j
public class LogExample {
}
将产生:
public class LogExample {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
}
@CommonsLog(topic=“CounterLog”)
例子:
@CommonsLog
public class LogExample {
}
将产生:
public class LogExample {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
}
其他的注解
@Accessors
fluent(流畅的)
fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。就是前面没有get和set三个字的
chain(链式的)
支持链式编程的
prefix(前缀)
生成的get和set方法,会忽视前缀
@ExtensionMethod
为已经存在的类增加方法。它可以达到扩展已有类的方法。
@FieldDefaults
说白了,就是给类设置一个默认值,文章中有代码
@Delegate
package com.pollyduan;
import java.util.ArrayList;
import java.util.Collection;
import lombok.experimental.Delegate;
public class User {
private interface SimpleCollection {
boolean add(String item);
boolean remove(Object item);
}
@Delegate(types = SimpleCollection.class)
private final Collection<String> collection = new ArrayList<String>();
public static void main(String[] args) {
User user=new User();
user.add("item1");//实际上加到collection中去了
}
}
可见必须写已经存在的方法,如果不存在的方法,会报错的
Error:(23, 5) java: 找不到符号
符号: 方法 remove1(java.lang.Object)
位置: 类型为java.util.Collection<java.lang.String>的变量 collection
onMethod= / onConstructor= / onParam=
感觉用处不大
@UtilityClass
把一个类全部变成静态的
@Helper
我觉得应该是帮忙初始化的时候有用
@FieldNameConstants
就是生成和变量名一样的代码例如 public static final String andSoAmI = "andSoAmI";
很nice的东西
@SuperBuilder
没案例,不想看
@Tolerate
标注了 @Tolerate
lombok 认为它不存在
@Jacksonized
不怎么用得到