在一个单类中,我们写链式调用可以这样:
public class B {
public B funB1() {
return this;
}
public B funB2() {
return this;
}
}
使用方法:
B b = new B();
b.funB1().funB2().funB1();
现在如果带有继承关系:
public abstract class A {
public A funA() {
return this;
}
}
public class B extends A {
public B funB1() {
return this;
}
public B funB2() {
return this;
}
}
使用时会发现,一旦调用了A类的方法,就无法再调用B类的方法了,因为此时返回的对象是A了,无法切换回B。
B b = new B();
b.funB1().funB2().funA().funA().funA()...
解决方法
public abstract class A<T extends A<?>> {
public T getThis() {
return (T) this;
}
public T funA() {
return getThis();
}
}
public class B extends A<B> {
public B funB1() {
return this;
}
public B funB2() {
return this;
}
}
使用方法:
B b = new B();
b.funB1().funB2().funA().funA().funA().funB1().funB2();