前言
先为你写下一段常见代码:
代码语言:javascript复制public class Person {
private String name;
private int age;
private String sex;
private String birthday;
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
这个就是我们最常见的代码,每个private修饰的成员变量都有一个setter和getter方法,今天要讲的Lombok就是可以自动帮你生成setter和getter的神器!代码就可以变成下面酱紫!
代码语言:javascript复制@Setter
@Getter
public class Person {
private String name;
private int age;
private String sex;
private String birthday;
}
就是这么清爽,就是这么简洁!那么可能就要开始杠了,为什么不能用public修饰,这样setter和getter就直接可以不用写了,还用什么神器?但是规范就是规范,为了变量的访问权限控制在自己手中,所以必须用private修饰。接下来就是安利Lombok使用和其他功能。
IDEA安装插件(eclipse自行百度)
在settings的Plugins,搜索Lombok并安装,重启IDEA即可生效。
引入依赖
如果你是用的maven项目,使用pom引入:
代码语言:javascript复制<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
不用maven的就直接导入lombok-1.18.12.jar
使用大全
写段代码,包含常用且易懂的Lombok注解
代码语言:javascript复制@Setter
@Getter
@Slf4j
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private int age;
private String sex;
private String birthday;
public void sing(@NonNull String songName) {
// @Slf4j生成的logger
log.info(songName);
System.out.println(songName);
}
public void read(String bookPath) throws FileNotFoundException {
@Cleanup
FileInputStream in = new FileInputStream(bookPath);
}
}
@Setter和@Getter
这两个注解用在类上就是为所有的private成员变量添加getter和setter方法,如果放在成员变量上,就是为单个成员变量添加setter和getter方法
@Slf4j
我们平时使用slf4j打印日志的时候,需要获取logger,
代码如下:
代码语言:javascript复制Logger logger = LoggerFactory.getLogger(Person.class);
logger.info("Hello World!")
使用@Slf4j注解之后,lombok帮你创建了一个名为log的logger,可直接使用。
@ToString
这个不推荐使用,虽然可以帮你生成toString方法,但是往往不符合我们的要求。他输出的结果是这样的。
代码语言:javascript复制Person(name=null, age=0, sex=null, birthday=null)
@AllArgsConstructor
帮你生成一个包含所有字段的构造器
@NoArgsConstructor
帮你生成一个无参类构造器,即new Person(){}
@NotNull
顾名思义,就是他修饰的变量和参数不能为null。测试一下
代码语言:javascript复制public static void main(String[] args) {
new Person().sing(null);
}
// 报错:Exception in thread "main" java.lang.NullPointerException: songName is marked non-null but is null
@Cleanup
我们在读取文件的时候创建流,在使用完后总会调用close()来关闭这个流。在获取数据库的connection的时候,用完也会调用close()来关闭连接。@Cleanup修饰在创建流和获取Connection的时候,在使用完成后会自动帮你关闭,你就不用调用close()自行关闭
@Data
这个没写在样例代码中,是因为这个是一个作用在类上,并且是@Setter、@Getter、@Slf4j的集合体。但是不推荐使用。包含的注解如下图:
结语
Lombok简化了代码,但是也会在代码阅读上带来了一些障碍,利弊之间,自行权衡。任何事都有两面,有的人喜欢它,也有厌恶它。从我的角度来说,至少它让我的代码变得更简洁。据说Java14到时候也会提供Lombok的这些功能,拭目以待吧!