lombok常用注解及使用方法
文章目录
一、安装lombok
-
idea下载lombok插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6KGQJr4-1595238053124)(/Users/qicheng/Library/Application Support/typora-user-images/image-20200720155303416.png)]
-
添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
二、变量
@NonNull
作用于方法参数上
Lombok将在方法/构造函数体的开头插入一个空检查,并将参数的名称作为消息引发一个NullPointerException
作用于字段上
对该字段进行判空校验
@NonNull private String t;
private A(String t) {
if (t == null) throw new NullPointerException("description");
this.t = t;
}
三、实体类
@Setter
生成setter方法,final变量不包含
@Getter
生成getter方法,final变量不包含
@RequiredArgsConstructor
可以生成带参或者不带参的构造方法。若带参数,只能是类中所有带有 @NonNull注解的和以final修饰的未经初始化的字段**
@AllArgsConstructor
使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数。在加上@AllArgsConstructor 时,一定要补上 @NoArgsConstrcutor
@NoArgsConstructor
使用后创建一个无参构造函数
@ToString
生成所有属性的toString()方法
@EqualsAndHashCode
生成equals()方法和hashCode方法
@Data
@[email protected][email protected][email protected][email protected]
使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。
特有的静态方法:String staticConstructor() default “”;
@Data(staticConstructor=“add”)
通过新的方式来创建实例:Tel.add(0)
@Value
不可变的@Data,所有字段由private和final修饰,不会产生setter方法。类本身也是由final修饰。
@Builder
Builder的作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数
//原始类
@Builder
public class TestEntity {
private String name;
private Integer age;
private final String type = "person";
}
//反编译的类
public class TestEntity {
private String name;
private Integer age;
private final String type = "person";
@ConstructorProperties({"name", "age"})
TestEntity(String name, Integer age) {
this.name = name;
this.age = age;
}
public static TestEntity.TestEntityBuilder builder() {
return new TestEntity.TestEntityBuilder();
}
public static class TestEntityBuilder {
private String name;
private Integer age;
TestEntityBuilder() {
}
public TestEntity.TestEntityBuilder name(String name) {
this.name = name;
return this;
}
public TestEntity.TestEntityBuilder age(Integer age) {
this.age = age;
return this;
}
public TestEntity build() {
return new TestEntity(this.name, this.age);
}
public String toString() {
return "TestEntity.TestEntityBuilder(name=" + this.name + ", age=" + this.age + ")";
}
}
}
//Builder模式使用方法
@Test
public void test(){
TestEntity testEntity = TestEntity.builder()
.name("java")
.age(18)
.build();
}
@Slf4j
自动生成该类的 log 静态常量,日志可直接打印
@Synchronized
用在类方法或者实例方法上,效果和synchronized关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized关键字的锁对象分别是类的class对象和this对象,而@Synchronized得锁对象分别是私有静态final对象lock和私有final对象lock和私有final对象lock
四、代码块
@Cleanup
自动资源管理:自动调用关闭资源方法,默认是调用close()方法,在finally块中,只有在给定资源不是null的情况下才会调用清理方法
@Cleanup InputStream in = new FileInputStream();