为了使此代码正常工作,您需要解决不兼容类型的问题:将
T返回类型替换为
base<T>,并将结果强制转换
Variant#getOp1()为
Variant<T>以允许对其进行调用
calculate()(此处很安全,因为
Variant#getOp1()始终返回
Variant:
abstract class base<T extends base<T>> { protected final base<T> getOp1() { return condition() ? getNewInstance() : this; } protected abstract base<T> getNewInstance(); public abstract base<T> combine(T other);}class Variant<T extends Variant<T>> extends base<T> { protected base<T> getNewInstance() { return new Variant(); } public base<T> combine(T op2) { Variant<T> op1 = (Variant<T>) getOp1(); // <- explicit cast op1.calculate(op2); return op1; } private void calculate(base<T> other) { // ... }}
顺便说一句,我仍然没有看到如此复杂的类型结构的原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)