涉及继承的Java泛型

涉及继承的Java泛型,第1张

涉及继承的Java泛型

为了使此代码正常工作,您需要解决不兼容类型的问题:将

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) {         // ...    }}

顺便说一句,我仍然没有看到如此复杂的类型结构的原因。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5008565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存