java从List <b>转换为List <a> where B extends A</a> </b>

时间:2011-10-07 17:22:48

标签: java types casting covariance

这可能吗?如果没有,为什么这不可能在Java?

interface B extends A {}
public List<B> getList();
List<A> = getList(); // Type mismatch: cannot convert from List<B> to List<A>

我认为我正在寻找的主题是“协变类型”,如herehere,但它的模糊,并不能解决我的问题。

3 个答案:

答案 0 :(得分:6)

这是一个直观的例子,说明这会如何使事情变得严重错误:

interface B extends A {}
List<B> blist=new List<B>();
List<A> alist=blist;
alist.add(new A()); //should be ok, right?
B b = blist.get(0); //fail: even though blist is a List<B>, it now has an A in it

答案 1 :(得分:4)

尝试

List<? extends A> = getList()

答案 2 :(得分:1)

你不能这样做的原因是A和B不一样,你指定getList返回一个B的List(不是超类或子类)