【发布时间】:2012-08-28 10:00:57
【问题描述】:
可能重复:
Most efficient way to cast List<SubClass> to List<BaseClass>
why polymorphism doesn't treat generic collections and plain arrays the same way?
如果我有一个抽象基类 BaseClass 并且我编写了一个期望 Collection<BaseClass> 作为其参数的函数,则使用类 SubClass extends BaseClass 的 Collection<SubClass> 调用该函数将无法编译。
在基类中:
public void addLots(Collection<BaseClass> collection) {
for(BaseClass yourbase : collection) {
us.add(yourbase) //what you say!!
}
}
在子类中:
public void addMoreLots(Collection<SubClass> collection) {
addLots(collection); //FAILS TO COMPILE
}
现在我想我明白这是为什么了:Collection<SubClass> 不是Collection<BaseClass> 的子类。进行此调用的正确方法是什么?
【问题讨论】:
-
谢谢——虽然我找不到它,但我认为这解决了一个不同的问题(更多地关注“我该怎么做”,而不是关注“为什么数组不同于集合”) .这个推测适用于任何泛型,例如
WeakReference。
标签: java inheritance collections