Java 从列表<B>转换为列表<A>,其中 B 扩展了 A



这可能吗?如果不是,为什么在Java中不可能呢?

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

我认为我正在寻找的主题是"协变类型"在这里和这里,但它的模糊,它不能解决我的问题。

下面是一个直观的例子,说明这可能会使事情变得非常糟糕:

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

Try

List<? extends A> = getList()

不能这样做的原因是A和B不相同,您已经指定getList返回B的列表(不是超类或子类)

相关内容

  • 没有找到相关文章

最新更新