java - 在 Java 中将 Collection<SubClass> 传递到期望 Collection<BaseClass> 的函数失败

标签 java inheritance collections

Possible Duplicate:
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>作为其参数,使用 Collection<SubClass> 调用该函数一个类SubClass extends BaseClass编译失败。

在基类中:

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> 的子类。进行此调用的正确方法是什么?

最佳答案

紧急情况下,Collections.unmodifiableCollection(Collection<SubClass>)可以返回 Collection<BaseClass> 。 (当然,这使得集合不可修改,但这就是可以安全地将 Collection<SubClass> 视为 Collection<BaseClass> 的原因。)

关于java - 在 Java 中将 Collection<SubClass> 传递到期望 Collection<BaseClass> 的函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251696/

相关文章:

java - PriorityQueue 适合这种情况吗?

java - 通过 java 命令运行具有依赖项的 Gradle 编译 Java 应用程序

java - 在 Java 中获取 Unicode 值的字符表示形式

c++ - undefined reference ... : inheritance from a template class

Scala mutable BitSet,变异操作在哪里?

c# - 为什么不能将 Dictionary<T1, List<T2>> 转换为 Dictionary<T1, IEnumerable<T2>>?

java - 阅读格式不一致的文本文件的建议方法

java - 有没有办法减少 if 语句?

ruby - 在模块中包含外部 Ruby 模块?

java - 扩展 JFrame 的 Frame 类中存在的方法无法在 main() 中调用