前言
Java8流行的函数式编程使用的方式类似于a.b().c().d()
, 仿佛能无穷无尽点下去。
其实这个代码很简单, 换一种写法大概就懂了this.getClass().getSimpleName().length();
。
在wiki上也有介绍: Fluent_interface
实现
其实链式调用很简单, 就是一个return 对象;
的事情。
比如return this;
等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Student{ private String name; private int age; public static create(){ return new Student(); } public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public Student name(String name){ this.name = name; return this; } public Student age(int age){ this.name = name; return this; } }
|
调用结果如下
1 2 3 4 5 6 7 8 9
| public class Main{ public static void main(String[] args){ Student s1 = new Student(); s1.setName("stu1"); s1.setAge(12); Student s2 = Student.create().name("stu2").age(12); } }
|
优势和缺陷
显而易见, 使用链式调用的代码更加简洁优雅, 方法间的关联度紧密。
同样缺陷也在这里, 每个方法都依赖上一个方法, 如果有一个返回空指针, 那么就会报错。需要代码编写人员的功底比较强。
当然, return this;
是不可能空指针异常的。