Lombok
这里给大家介绍一个插件 Lombok ,它可以使用注解的方式来帮助我们来实现set,get,构造方法和一些其他的方法,比如equals,toString等,省去了写代码的重复工作,当修改代码的同时,不需要再去修改一些重复的方法,减轻负担。
安装
和平常的插件安装相仿,在设置的插件里面搜索Lombok,安装即可
引入
可以通过jar方式引入,然后导入,也可以直接通过maven方式引入坐标
1 2 3 4 5 6
| <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>RELEASE</version> <scope>provided</scope> </dependency>
|
使用
注解详情
@NonNull @Getter @Setter @ Cleanup @ToString @EqualsAndHashCode
@NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor
@Data
NonNull
用在获取属性或者构造器上,Lombok生成一个非空声明,用于校验参数,避免空指针的生成
1 2 3 4 5 6 7 8 9 10 11 12
| public class Lom { public String name; public String getName(@NonNull Lom lom){ return lom.name; } @Test public void test(){ Lom lom = new Lom(); System.out.println(lom.getName(null)); } }
|
Getter Setter
作用在成员属性上,为属性生成getter和setter方法,默认生成的权限修饰符时public,也可以通过传参的方法来更改生成方法的权限
1 2 3 4 5 6 7 8 9 10 11
| public class Lom { @Getter @Setter public String name; @Test public void test(){ Lom lom = new Lom(); lom.setName("hahah"); System.out.println(lom.getName()); } }
|
下面是拥有子类时
1 2 3 4 5 6 7 8 9 10 11
| public class Lom { @Getter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE) public String name; @Test public void test(){ Lom lom = new Lom(); lom.setName("hahah"); System.out.println(lom.getName()); } }
|
1 2 3 4 5 6 7
| public class son extends Lom{ @Test public void test(){ son s = new son(); System.out.println(s.getName()); } }
|
Cleanup
这个用在变量前面,可以保证变量代表的资源会被关闭,例如输入输出流,这个注解默认调用close方法,如果这个资源有其他的关闭方法,则使用 @Cleanup(“method_name”);
ToString
该注解会自动重写对应的toString方法,默认情况下输出全部的属性
@ToString.Include(rank = -1)用到属性上,默认为0,rank值越大先打印
将某个方法的输出附加到本类的toString后面,只能是non-static的无参方法,@ToString.Include用到方法上,@ToString(includeFieldNames=true)加到类上
1 2 3 4 5 6 7 8 9
| @ToString public class Lom { public String name; @Test public void test(){ Lom lom = new Lom(); System.out.println(lom); } }
|
通过引入参数,可以选择性的包含哪个属性
1 2 3 4 5 6 7 8 9 10 11
| @ToString(exclude = {"name"})
public class Lom { public String name; public String age; @Test public void test(){ Lom lom = new Lom(); System.out.println(lom); } }
|
EqualsAndHashCode
默认情况下,生成不包含static和transient的equal和hashcode方法
和ToString类似,可以通过exclude选择性去除一些属性
1 2 3 4 5 6 7 8 9 10 11
| @EqualsAndHashCode(exclude = {"name"}, callSuper = false) public class Lom { public String name; public String age; @Test public void test(){ Lom lom_1 = new Lom(); Lom lom_2 = new Lom(); System.out.println(lom_1.equals(lom_2)); } }
|
callSuper 比较两个子类从父类继承来的字段,如果为false,则不比较从父类继承来的字段,如果为true,则比较
NoArgsConstructor RequiredArgsConstructor AllArgsConstructor
NoArgsConstructor 和 AllArgsConstructor生成不包含属性的构造方法和包含所有属性的构造方法
三个注解都可以设置生成方法的权限和 Getetr ,Setter 类似
RequiredArgsConstructor 注解为类中所有带有 @NonNull 或者 带有final 修饰的成员变量生成的成员变量生成对应的构造方法
如果类中存在 finall 修饰的成员变量,AllArgsConstructor 不能使用 不能给 final 变量赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @NoArgsConstructor @AllArgsConstructor
public class Lom { public final String car_ = "aaa"; public String name; public String age;
@Test public void test(){ Lom lom_1 = new Lom("smg","age"); } }
|
Data
会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法
1 2 3 4 5 6 7 8 9 10
| @Data public class Lom { public String name; public String age; @Test public void test(){ Lom lom_1 = new Lom(); System.out.println(lom_1); } }
|