val
自动识别参数类型,会定义一个局部final的变量
例如 val a = new ArrayList<String>(); 相当于 final ArrayList<String> a = new ArrayList<String>();
@NonNull
非空约束,
可以注解在方法的参数上,类的属性上
public void hello(@NonNull String hello){
System.out.println(hello);
}
如果hello为空的话,不会执行System.out.println(hello):方法,会抛出一个空指针异常
-----
注解在方法的属性名上,如果有,@RequiredArgsConstructor注解 构造该对象时,必须传入参数
public class App
{
@NonNull
private String hello;
}
@Cleanup
对象引用结束前调用某个方法,默认是close()方法,也可以自己制定一个无参的方法,多用于关闭流等操作,避免繁琐的try{}catch{}操作
@Getter/Setter
可以注解在类上或者字段上。
注解在类上为所有的字段自动生成过 Getter/Setter 方法
可设置参数value=AccessLevel.xxxx 生成方法的访问权限
@ToString
includeFieldNames 生成的toString是否包含字段名称,默认true
exclude 排除那些字段
of 包括那些字段(默认全部),如果指定了对象,那么 exclude 里面对应的字段也会被执行
callSuper 是否调用父类的 toString()方法
doNotUseGetters 获取字段值的时候,如果有可用的getters 是否不使用,默认false使用
@EqualsAndHashCode
exclude
of
callSuper
doNotUseGetters 同上
@NoArgsConstructor (自动生成无参构造器)
@RequiredArgsConstructor (有参构造器,如果 字段有 @NonNull 注解,那么构造器必须包含该字段,不可以和@NoArgsConstructor同在)
@AllArgsConstructor 全参构造器,会生成一个带有全部参数的构造器
staticName 会将构造器私有化,并创建一个静态的方法
onConstructor
access 构造器的访问权限,默认是 public
@Data
相当于使用了 @Getter
, @Setter
, @ToString
, @EqualsAndHashCode
and @RequiredArgsConstructor 这些注解
staticConstructorc 类似于staticName参数的作用
@Value
类似Data,但是会将所有的字段设置成 private final 的,并且不会生成setters
@Builder
会创建一个内部类,并创建静态的 builder方法,可以通过该方法链式的构造对象,描述起来比较复杂
这一段最好能自己看看官方文档:
https://projectlombok.org/features/Builder.html
@SneakyThrows
如果有一些自己不想处理的异常,但是抛出后,调用该方法的时候又有很多 try{}catch{}很麻烦,就可以用这个注解。
用的比较多的是实现Runnable 的run()方法里面。众所周知run()方法是没有抛出异常的,写在里面的代码动不动就要try{}catch{}着实麻烦,用这个注解就可以搞定了
@Synchronized
给方法加锁
@Wither
该注解放在属性前面,会生成属性的withXXX方法,可以使用withAge(xxx).withXX() 链式操作
日志类注解:自动在你的类里面生成静态的 类实例
@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
onMethod= / onConstructor= / onParam= 可以在对应的 地方添加 其他注解
如果我们用了@Getter注解, 生成的getXX()方法是我们是看不到的,如果我们要在生成的getXXX()方法上面加注解,可以用 @Getter(onMethod=@__({@Ann1,@Ann2,@Ann3(value="hello")})) 这样的方式
示例代码如下
@AllArgsConstructor(onConstructor=@__(@Inject))
public class OnXExample {
@Getter(onMethod=@__({@Id, @Column(name="unique-id")}))
@Setter(onParam=@__(@Max(10000)))
private long unid;
}