Lombok
一种 Java 实用工具,可以帮助开发人员消除 Java 冗长的代码,尤其是针对简单的 Java 对象(pojo) ;它通过注解实现这一目的。
maven:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
1、标签
注解 | 用法 | 备注 |
---|---|---|
@Getter @Setter | @Getter(AccessLevel.PROTECTED) // 设置访问级别,默认public @Setter(AccessLevel.NONE) // 设置Setter访问级别为NONE表示不可Setter | * 可加在类或者单独的属性上,@Getter()还可以设置访问级别 * 只对成员变量产生效果,不对类级的static产生效果,final类型的只会产生Getter方法 * 对于不想被访问的数据可以单独设置访问级别为 AccessLevel.NONE 就不会生成对应的Getter / Setter方法 |
@ToString | @ToString(exclude={"属性1", "属性2"}) // 排除不添加到ToString的属性 @ToString(of={"属性1", "属性2"}) // 选择添加到ToString的属性 @ToString(callSupper=true) // 调用父类ToString [ 在本类ToString之前追加父类的,并非只调父类 ] | * 只能加在类上 * exclude / of 属性值只有一个时可以省略大括号 |
@EqualsAndHashCode | @EqualsAndHashCode(exclude={"属性1", "属性2"}, of={"属性4", ”属性5“}) // 设置排除或者包含的判断条件 | * 只能用在类上 * 生成 equals(Object):boolean / canEquak(Object):boolean / hashCode():int 方法 * equalsObject):boolean 会调用 canEquak(Object):boolean 进行判断,但是其自身就包含canEquak(Object):boolean的方法,所以实际上 canEquak(Object):boolean 代码是冗余的,但是可以单独调用(内部只有一个 return o instanceof 当前类) * hashCode():int 方法只会计算包含的属性的hashCode |
@NonNull | public void show(@NonNull String 属性名) {...} // 编译后会在方法内先判断属性是否为null @NonNull private int 属性名; // 属性在使用的时候不能为null" | * 可以加在方法上(判断当前属性是否为null) 、 字段上(在使用的时候不能为null) 、类上 |
@NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor | @NoArgsConstructor // 生成无参构造 @RequiredArgsConstructor // 生成带参构造【包含@NonNull修饰的字段和final修饰的未赋值字段】 @AllArgsConstructor // 生成所有参数的构造器 | * 只能用在类上 * final 修饰的属性只能赋值一次,如果有无参构造则必须声明时赋值,没有无参可不赋值,不赋值时 @RequiredArgsConstructor 会对其产生赋值操作,否则@RequiredArgsConstructor 不会搭理final修饰的属性 * +:@RequiredArgsConstructor (staticName="函数名") // 会把构造器设为private并生成一个设定的函数返回当前构造器构造的对象 |
@Data | 集成了 4 个注解:@Getter/@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor | |
@Builder | eq:在User类上注解@Builder 实例化的时候可以通过建造者模式进行链式编程(函数编程)添加属性值 [ 流式编程 ] User user = User.builder().属性1(值).属性2.(值).build(); | * 只能用在类上 * 为类生成复杂的构造器API |
@Log | 为类生成一个 Logger 对象 log,在内部即可使用 eq:类方法内调用log打印日志:log.info("内容") | * 作用于类上 |
val | import lombok.val; val map = new HashMap(); // 在编译阶段才会确定 map 的类型,简化代码 | * Lombok 新增的关键字类型,类似 js 的 var |
@Cleanup | @Cleanup InputStream is = new FileInputStream("path"); | * 作用于I/O流对象,实现自动关闭对象进行清理的作用,节省了大篇幅重复枯燥的冗余close代码 |
@Value | 将字段变成不可变类型(使用final修饰) 同时包含@ToString、@EqualsAndHashCode、@AllArgsConstructor、@Getter | * 作用于类上 |
@SneakyThrows | @SneakyThrows public void xxFunc(){...} @SneakyThrows(InterruptedException.class) public void xxFunc(){...} | * 作用于方法上 * 使用try catch来捕获Throwable异常,也可以设置要捕获的异常类型 |
@Synchronized | @Synchronized public void xxFunc(){...} @Synchronized("readLock") public void xxFunc(){...} | * 给方法加同步锁 |