Lombok,真香

Lombok到底是什么?

它大致意思是:Lombok是一个很牛批的插件(本质是个Java库),项目里一旦引入了Lombok神器之后,你项目中所有诸如:对象的构造函数、 equals()方法,属性的 get()/set()方法等等,这些没有技术含量的代码统统都不用写了,Lombok帮你搞定一切,全部帮你自动生成!

听起来好像是挺不错…

眼见为虚,代码为实,本文亲自尝试一下!

项目中引入Lombok

除此之外,还要在IDE中安装Lombok插件

爽!get/set不用写了

以前我们写一个 POJO对象时,比如定义一个课程 Course,需要自己手动写上每个字段的 get()和 set()方法,就像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Course {

private Long id;
private String name;
private Integer score;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getScore() {
return score;
}

public void setScore(Integer score) {
this.score = score;
}

}

但是借助于Lombok,一切都变得优雅起来,代码篇幅省了一半

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Course {

@Getter
@Setter
private Long id;

@Getter
@Setter
private String name;

@Getter
@Setter
private Integer score;

}

两个注解:@Getter和 @Setter即可方便搞定。

更可以使用@data注解

1
2
3
4
5
6
@Data
public class Course {
private Long id;
private String name;
private Integer score;
}

爽!new对象变得优雅了

在没有用Lombok之前,我们假如想new一个对象,我们往往会这么做(以上面的 Course类为例):

引进Lombok之后,我们只需要在 Course类上用上 @Builder注解:

则 Course类对象的创建即可使用 链式表达 的方式一行代码完成:

到这里,如果你学过设计模式中的 “建造者模式” 的话,一定能猜到 @Builder注解就是一个典型的“建造者模式”的实现案例!

爽!构造函数不用写了

全参构造器不用写了

当你在你的类上使用了Lombok的注解 AllArgsConstructor时:

这时候你的类在编译后会自动生成一个全参构造函数,就像这样:

无参数构造器也不用写了

当你在你的类上使用了Lombok的注解 NoArgsConstructor时:

这时候你的类在编译后会自动生成一个无参构造函数,就像这样:

部分参数构造器也不用写了

当你在你的类上使用了Lombok的注解 RequiredArgsConstructor时:

这时候你的类在编译后会自动生成一个具备部分参数的构造函数,就像这样:

因为 name字段定义成 final,所以 Lombok自动会帮你生成一个部分参数的构造器!!因为 name字段定义成 final,所以 Lombok自动会帮你生成一个部分参数的构造器!!

爽!null判空不用写了

Lombok的 @NonNull注解可以自动帮我们避免空指针判断。该注解作用在方法参数上,用于自动生成空值参数检查,比如:

但是有了Lombok之后,事情就变得简单了,一个注解搞定:

爽!关流也不需要了

什么意思呢?

假如我们要读取一个 txt文本文件,一般会这样写代码:

注意,这个文件句柄在使用完成之后是一定要手动 close的,否则就有可能资源泄漏。

有了Lombok之后,这种擦屁股活儿统统不用干了,一个 @Cleanup注解即可搞定

上面列举了几个平时项目开发中使用非常频繁的Lombok注解,除此之外,还有诸如像:

@ToString:为类自动生成toString()方法
@EqualsAndHashCode:为类自动生成hashCode和equals实现
@Log:为类自动生成log日志记录
@Synchronized:为类方法或实例方法自动生成synchronized保护

等工具也是非常好用的,大家可以尝试在项目里用起来。

参考链接, 致谢

@Accessors注解的三个属性

Accessors翻译是存取器。通过该注解可以控制getter和setter方法的形式。

  1. @Accessors(chain = true)

使用chain属性,setter方法返回当前对象

1
2
3
4
5
6
7
8
9
10
@Data
@Accessors(chain = true)
class User {
    private Integer id;
    private String name;
    
    // 生成的setter方法如下,方法体略
    public User setId(Integer id){}
    public User setName(String name){}
}

参考链接

  1. @Accessors(fluent = true)
    使用fluent属性,getter和setter方法的方法名都是属性名,且setter方法返回当前对象
1
2
3
4
5
6
7
8
9
10
11
12
@Data
@Accessors(fluent = true)
class User {
private Integer id;
private String name;

// 生成的getter和setter方法如下,方法体略
public Integer id(){}
public User id(Integer id){}
public String name(){}
public User name(String name){}
}
  1. @Accessors(prefix = “f”)
    使用prefix属性,getter和setter方法会忽视属性名的指定前缀(遵守驼峰命名)
1
2
3
4
5
6
7
8
9
10
11
12
@Data
@Accessors(prefix = "f")
class User {
private Integer fId;
private String fName;

// 生成的getter和setter方法如下,方法体略
public Integer id(){}
public void id(Integer id){}
public String name(){}
public void name(String name){}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  1. © 2020 Liu Yang    湘ICP备20003709号

请我喝杯咖啡吧~

支付宝
微信