本篇就聊Lombok,先看一下Lombok是什么。
Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等
本篇就是简单的聊一下其使用,所以不分析其具体实现逻辑,以及底层。不过还是要简单的说一下,其能实现的原理还是通过反射实现的,前面聊过注解的范围,其也是设置了注解生效的范围。当然就算不了解,在使用过程中也不是什么壁垒,对需要了解其底层原理的话可以看下:注解和反射.
现在来演示其简单的方式:
以前的话定义个javabean类的话需要这样写:
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后可以调用,但是使用Lombok的话如下:
import lombok.Data;
@Data
@AllArgsConstructor
public class Person {
String name;
int age;
}
是不是简单很多,但是有一点要说明那就是lombok虽然很方便,但是其有一个问题,那就是当一个项目团队中一个人是用这个插件,那么其它人也要使用,不然会报错的。所以如果自己写的项目是否使用根据自己的喜好即可,但是在项目中时候,就需要看项目需求文档。
配置插件
既然是插件,可以访问官网:https://projectlombok.org/download
但是因为是用的IDE,所以直接进行下载,不过有些不同的是,因为之前直接可以下载Lombok这个插件,现在似乎查询不到,所以只用
不过有些时候需要安装,因为IDE默认会安装的.
同样在使用的时候,需要导入其第三方包的。这个可以在编写代码的时候,写好Alt进行自动下载lombok的jar包即可。
这个时候还有一个问题,那就是在调用的时候会发现会报错,因为所以可以提示由get/set方法,但是在编译的时候会报错这个时候就需要如下设置:
然后就可以使用了。
注解
可以看出其注解或者说插件很多:
但是本篇指数聊一下常用的,其它不常用的如果需要就自己看一下文档即可。
注解 | 使用位置 | 描述 |
---|---|---|
@Getter | 字段或类上 | 【a】如果使用在类上,没有其它属性的话,生成类中所有字段的get方法。 【b】 如果使用在字段上,就生成对应的字段的get方法 |
@Setter | 字段或类上 | 其实类似于上一个注解,不过有一点要注意,其不会给final修饰的属性生成set方法。 |
@NoArgsConstructor | 类上 | 生成无参数的构造方法 |
@RequiredArgsConstructor | 类上 | 生成部分参数的构造方法 |
@AllArgsConstructor | 类上 | 生成全部属性的构造方法。 |
@ToString | 类上 | 重写tostring方法,打印格式: 类名(属性1=值1, 属性2=值2, …),当然也可以写其中几个@ToString( exclude={“不含属性1“,”不含属性2”})或者写包含@ToString( of={“含属性1”,”含属性2”} |
@EqualsAndHashCode | 类上 | 判断个对象是否一直一般会重写了equals,和hashcode方法。这而这个注解还会再重写一个方法canEqual方法 |
@data | 类上 | 生成get/set方法,还有重写tostring,hashcode,equals,以及canEqual方法。 |
@CleanUp | 局部变量 | 会自动再方法结束前调用close方法,常用咋IO等操需要关闭的资源的变量前。 |
@NonNull | 字段,参数,局部变量 | 用于非空判断,避免出现空指针异常,放在前面使用。@NonNull String s; |
var | 变量前 | 可以省略变量的具体类型例如 var s= new String(”ss“); |
@Builder | @Builder | 这个可以简化赋值属性操作,比如 Test t =new Test(); t.setName(“dd”); t.setAge(12);如果很多就会写很长 然后可以如此赋值 Test t =new Test(); t.builder().name(”dd“).age(12); |
演示其中几个感受一下其让代码简洁:
public class test {
public static void main(String[] args) {
User user =new User("张三",12);
System.out.println(user);
}
}
@Data
@AllArgsConstructor
class User{
String name;
int age;
}
总结:
- 优点
- 提高开发效率,使用注解即可为POJO添加get、set方法、构造器、toString、equals、hashCode方法、非空判断、关闭资源等。而且是代码更加简洁。
- 属性修改时,无需修护对应的get、set方法。
- 缺点
- 大大降低了代码的可读性和完整性,让人觉得摸不到头脑。
- 对于不熟悉Lombok的开发人员,开发和修护造成一定的障碍。
还是那句话用不用的话,个人看习惯,项目看规范。反正技多不压身,多学一点是一点。