【发布时间】:2010-03-17 09:14:47
【问题描述】:
我确定这个问题之前已经回答过了,但我真的找不到。
我有一个 java 类 SomeClass 和一个抽象类 SomeSuperClass。 SomeClass 扩展了 SomeSuperClass。
另一个抽象方法有一个返回Collection<SomeSuperClass> 的方法。在一个实现类中,我有一个Collection<SomeClass> myCollection
我知道我不能只返回myCollection,因为Collection<SomeClass> 不继承自Collection<SomeSuperClass>。尽管如此,我知道myCollection 中的所有内容都是SomeSuperClass,因为毕竟它们是扩展SomeSuperClass 的SomeClass 对象。
我怎样才能做到这一点?
即我想要
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
我发现的唯一方法是通过非泛型类型进行强制转换并获得未经检查的警告等等。不过,一定有更优雅的方式吗?我觉得也不需要使用Collections.checkedSet() 和朋友,因为静态地确定返回的集合只包含SomeClass 对象(当向下转换而不是向上转换时不会出现这种情况,但这不是我正在做的)。我错过了什么?
谢谢!
【问题讨论】: