我需要提供一個通用接口用於單獨的類層次結構,並希望該接口支持調用鏈接。反射泛型類型邊界和方法鏈接
我試圖做到這一點使用反射邊界,但我似乎無法得到它的工作,而不必將「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()
方法所做的那樣)?