示例
单个类中链式调用非常常见,比如StringBuffer中的append方法
StringBuffer sb = new StringBuffer();
sb.append("精通")
.append("java")
.append("只需要CV")
.append("即可");
单一类链式调用
链式调用单类写法,返回当前对象即可
class Cat {
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}
调用测试
public class Client {
public static void main(String[] args) {
Cat cat = new Cat();
//链式调用
cat.eat().sleep();
}
}
}
//输出结果
吃东西
准备睡觉
继承下的链式调用
继承下的链式调用将发生异常
class Animal {
public Animal run() {
System.out.println("奔跑");
return this;
}
}
class Cat extends Animal{
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}
客户端调用,出现编译错误
public static void main(String[] args) {
Cat cat = new Cat();
//此处.sleep出现编译错误
//原因是调用run后返回的是父类Animal类型,此时无法调用子类扩展的sleep方法
cat.eat().run().sleep();
}
引入泛型解决
class Animal<T extends Animal<T>> {
public T run() {
System.out.println("奔跑");
return (T)this;
}
}
class Cat extends Animal<Cat>{
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}