在 Java bean 中实现 setter 的链式调用
在经年累月的开发中,你是不是已经对动辄数行的.setXXX()
方法厌烦了呢?在这篇博文中,我将介绍一个小技巧,可以稍稍让你的代码变得美观一些。
前言
通常来说,一个 POJO 大致上会是这样的
1 | public class Student { |
然后,在赋值的时候,会是这样的
1 | Student james = new Student(); |
上面这三行 set 方法,本来没干什么事,却要写 3 行代码六十多个字,是不是看起来很难受,写起来很费劲?
那么,这时候就可以通过链式调用 setter 来显著减少代码行数。
Setter 的链式调用
首先,要实现链式调用 setter,就得稍微修改一下 setter 方法。放心,改动量是很小的,对业务是没有影响的,操作也是一劳永逸的。
具体做法呢,就是让 setter 返回这个 POJO 类型,而不是 void,然后将 this
返回,比如这样:
1 | public Student setName(String name) { |
然后,在创建对象的时候,就可以这样:
1 | Student student = new Student().setName("james").setAge(22).setScore(80); |
怎么样?是不是突然变得很短很简洁?写起来是不是很方便?
但是,要一个个改那么多 setter,也挺麻烦的,特别是 IDE 里面还不一定能自动化,有没有更好的办法?
答案是,有!
是啥呢?
Lombok!
用 Lombok 实现 setter 的链式调用
Lombok 是一个自动生成模版代码的工具,像构造方法啊、getter 和 setter 啊,都可以用一个或多个注解来代替,然后在编译期由 Lombok 替你写这部分的代码。如果你还没用过,那么请务必学习和试用一下,它可以为你省下那些浪费在模版代码上的时间。
在引入了 Lombok 之后,你就可以把上文的 Student
类重构成这样子了:
1 |
|
是的,你不再需要去写 getter 和 setter 了,更不需要一个个的去修改来让它支持链式调用了。只需要两个注解,就可以完成上面的一大片工作。
第一行的 @Data
注解,是一系列注解的集合,用来生成一系列的模版代码。由于这不是本文重点,所以就不再展开说了。
第二行的 @Accessors
注解,就是这里的重点了,它用来设定 Lombok 应该怎样生成 setter 和 getter 代码。而其中的 chain
属性,就是打开链式 setter 的开关,将它打开之后,就可以生成支持链式调用的 setter 方法。
然后,你就可以像上文一样,去享受链式调用了。