Lombok插件
Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 hashCode() 和 equals() 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。
自动生成getter、setter、空参构造器、带参构造器、toString等方法,减少代码量,使代码简洁。
1. 使用方法:
idea安装Lombok插件(新版idea会内置)
添加依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency>
使用
package org.gs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.NonNull; /** * @author admin * @date 2021/9/10 5:19 下午 */ @Data @AllArgsConstructor @NoArgsConstructor public class User { @NonNull private int id; private String name; private String pwd; }
2. 注解
注解下具体属性看官网。
- @NonNull:进行判空检查,如果为空则抛出NullPointerException。
- @Cleanup:自动关闭流,使用方法:
- @Cleanup: Reader reader = new FileReader(path);
- @Getter/@Setter:getter/setter方法
- @ToString:toString方法
- @EqualsAndHashCode:equals和hashCode方法
- @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor: 无参、带必需参、带参都有的构造方法 其中,必须带参的参数为@NonNull注解的和以final修饰的未经初始化的字段
- @Data: 生成无参构造、get、set、toStirng、hashCode、equals方法 如与上述带参构造一起使用,则不会自动生成无参构造
- @Value:和@Data类似,不过会把类的属性转换成final修饰的,不会有setter方法。
- @Builder:自动为类添加builder模式,可以通过builder来构建对象。不需要再声明构造函数。
- @SneakyThrows:为类添加try catch模块,不需要编写异常捕获代码。
- @Synchronized:为类添加同步锁。
- @With:克隆对象,修改一个值而保留其他值不变。
- @Log:可以添加输出日志的信息
3. 弊端
- 侵入性大
- 需要在IDE中安装对应插件。
- 一个人用其他人都得用。
- 在jar包中使用了Lombok,依赖这个jar包的所有应用都必须安装这个插件。
- 可读性低,可调试性低。Lombok在编译才会生成缺失代码。
- 影响JDK升级。
- 破坏封装性。使用Lombok后,一个类中的所用参数都自动设置了getter和setter方法,导致一些不应该有setter方法的私有属性有被修改的风险。
4. 坑
@Data注释会自动生成equals方法,并且只会比较子类的属性,不会考虑从父类继承的属性。无论父类属性访问权限是否开放。
解决方法:使用
@EqualsAndHashCode(callSuper=true)