在实现行为模式时,用继承和多态搞定是没问题,可在尝试使用泛型化的类来实现时,遇到了一些问题,自己也去看了协变逆变相关的知识,发现还是无法理解,特来向各位园友请求赐教,谢谢!想达成的效果是,定义一个泛型基类集合,然后添加此泛型基类派生出来的子类至集合中,并在循环中调用基类的方法。可是,遇到了一些问题,是泛型参数不支持继承?Car<IBrand>或ICar<IBrand> 并不能接受子类Car<Bmw> 的赋值, 看上去好像不仅仅像是协变逆变方面的问题,或是我哪里理解有误,不解中……
1 回答
隔江千里
TA贡献1906条经验 获得超10个赞
逆变协变这个你换个思路来看
协变,从具体往抽象(从派生类往父类变动)
逆变,从抽象往具体(同上相反)
从关键字看
协变 out (直接可以看成返回)
逆变 in (直接可以看为入参)
你写的代码的问题有两个
1.这里是协变(out)
2.class级别是不支持逆变和协变的(隐式支持协变,但这个是另一个话题了),所以你这边不可能直接从Car<T>中鼓捣出个类似于Cat<out T>的玩意出来,所以你第一行是没办法了
- 1 回答
- 0 关注
- 712 浏览
添加回答
举报
0/150
提交
取消