我需要提供一个通用接口用于单独的类层次结构,并希望该接口支持调用链接。反射泛型类型边界和方法链接
我试图做到这一点使用反射边界,但我似乎无法得到它的工作,而不必将“this”投射到所需的类型。这是我目前的做法:
public interface Operable<T extends Operable<T>> {
T prepare();
T operate();
}
public abstract class BaseOperable<T extends Operable<T>> implements Operable<T> {
@Override
public T prepare() {
System.out.println("Preparing...");
// why is this needed? "this" is a BaseOperable that implements Operable<T>
return (T) this;
}
}
public class SpecialOperable<T extends SpecialOperable<T>> extends
BaseOperable<SpecialOperable<T>> {
@Override
public T operate() {
System.out.println("Operation "
+ (Math.random() > 0.5 ? "succeeded" : "failed"));
// this seems to be required
return (T) this;
}
@Override
public T prepare() {
// if I don't override this, the supertype T is used which is
// BaseOperable and hides "specialOp" from chaining
return (T) super.prepare();
}
public T specialOp() {
System.out.println("Doing something special...");
return (T) this;
}
}
以上下面一行的代码编译: mySpecialOperable().prepare().operate().specialOp().operate();
我的问题是:有没有办法避免每return语句的类型转换?是否有可能不需要覆盖最专业级别的所有内容(如prepare()
方法所做的那样)?