lombok的使用
背景
在日常的开发中,有很多工作都是重复的,比如:
– 我们会定义很多的domain实体类,需要给每个字段手动添加setter/getter.
– 需要打印对象的时候,需要自己手动的添加toString()方法.
– 给domain添加无参构造函数和所有参数的构造函数.
如果domain修改了属性的名字或者删除属性的名字,上面三种情况都需要程序员手动的去修改代码.
那Java中有没有一种方式能够避免这种重复的劳动呢?那就是使用lombok.
Lombok简介
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法,官网有详细的使用说明和视频.
官方地址:https://projectlombok.org/
gitHub地址: https://github.com/rzwitserloot/lombok
Lombok安装
要是用Lombok之前,需要在你的开发工具中安装Lombok.下载lombok.jar
Eclipse的插件的安装步骤
先关闭Eclipse
双击运行lombok.jar
或者使用CMD命令执行 java -jar lombok.jar
命令
出现如下图显示的界面:
点击Specify location ...
关联你的Eclipse工具的 eclipse.exe
文件
选中之后,点击 Install/Update
,接着重启工具即可.
官网有Eclipse安装lombok的视频,就在首页.
IntelliJ IDEA插件的安装步骤:
使用IntelliJ IDEA的同学直接去下载对应的lombok插件,需要修改配置
settings—>Build,Execution,Deployment—>Compiler—>Annotation Processors中
将Enable annotation procession
复选框给勾选上.
Lombok的使用
安装lombok之后,不要忘记要把lombok.jar这个包加入到你的项目中.
使用Maven的同学添加如下依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
</dependency>
接下来就可以在我们的类中使用注解的方式给类添加setter/getter方法或者构造方法,下面给同学介绍比较常用的一些注解.
@Getter and @Setter
你可以给任意字段添加@Getter/@Setter的注解,让lombok给我们自动的生成setter/getter方法.
没用lombok前你的代码需要这样写:
01 public class GetterSetterExample {
02 private int age = 10;
03 private String name;
04
05 public int getAge() {
06 return age;
07 }
08
09 public void setAge(int age) {
10 this.age = age;
11 }
12
13 protected void setName(String name) {
14 this.name = name;
15 }
16 }
使用了lombok后你的代码是这样的:
01 import lombok.Getter;
02 import lombok.Setter;
03 public class GetterSetterExample {
04 @Getter@Setter
05 private int age = 10;
06 @Getter@Setter
07 private String name;
08 }
使用了Setter@Getter
,瞬间代码简洁了很多,而且也不用担心字段修改后,对应的setter和getter方法需要修改.
Setter@Getter
可以贴在字段上,是给该字段提供setter/getter方法.如果贴在类上,表示给该类下的所有字段添加setter和getter方法,上面的代码还可以这样写:
01 import lombok.Getter;
02 import lombok.Setter;
03 @Getter@Setter
04 public class GetterSetterExample {
05 private int age = 10;
06 private String name;
07 }
@ToString
所有的类都可以使用@ToString注解来生成该类的toString()方法.默认情况下,它将打印你的类名以及每个字段,按逗号分隔.
没用lombok前你的代码需要这样写:
01 public class ToStringExample {
02 private int age;
03 private String name;
04 @Override
05 public String toString() {
06 return "ToStringExample [age=" + age + ", name=" + name + "]";
07 }
08 }
使用了lombok后你的代码是这样的:
01 @ToString
02 public class ToStringExample {
03 private int age;
04 private String name;
05 }
@NoArgsConstructor and @AllArgsConstructor
@NoArgsConstructor
:可以给我们定义的类自动的添加无参构造函数.
@AllArgsConstructor
:可以给我们定义的类添加所有参数的构造函数.
没用lombok前你的代码需要这样写:
01 public class ConstructorExample {
02 private int age;
03 private String name;
04 public ConstructorExample() {
05 super();
06 }
07 public ConstructorExample(int age, String name) {
08 super();
09 this.age = age;
10 this.name = name;
11 }
12 }
使用了lombok后你的代码是这样的:
01 @NoArgsConstructor@AllArgsConstructor
02 public class ConstructorExample {
03 private int age;
04 private String name;
@EqualsAndHashCode
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
@Data
是快捷方式,代表@ToString, @EqualsAndHashCode, @Getter(所有字段), @Setter(所有字段)
没用lombok前你的代码需要这样写:
01 public class DataExample {
02 private int age;
03 private String name;
04 public int getAge() {
05 return age;
06 }
07 public void setAge(int age) {
08 this.age = age;
09 }
10 public String getName() {
11 return name;
12 }
13 public void setName(String name) {
14 this.name = name;
15 }
16 @Override
17 public String toString() {
18 return "DataExample [age=" + age + ", name=" + name + "]";
19 }
20 }
使用了lombok后你的代码是这样的:
01 @Data
02 public class DataExample {
03 private int age;
04 private String name;
05 }