我确信这已被回答之前,但我真的找不到它。铸造收集<SomeClass>收集<SomeSuperClass>
我有一个java类SomeClass
和一个抽象类SomeSuperClass
。 SomeClass
延伸SomeSuperClass
。
另一种抽象方法有返回Collection<SomeSuperClass>
的方法。在一个实现类,我有一个Collection<SomeClass> myCollection
我明白,我不能只返回myCollection
,因为Collection<SomeClass>
没有从Collection<SomeSuperClass>
继承。尽管如此,我知道myCollection
中的所有内容都是SomeSuperClass
,因为毕竟它们是SomeClass
对象,它们扩展了SomeSuperClass
。
我该如何做这项工作?
I.e.我想要
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
我发现的唯一方法是通过非泛型类型铸造并获取未经检查的警告和whatnot。但是,必须有更优雅的方式吗?我觉得也使用Collections.checkedSet()
和朋友是不需要的,因为它是静态确定返回的集合只包含SomeClass
对象(当向下转换而不是向上转换时,情况并非如此,但那不是我所做的)。我错过了什么?
谢谢!
啊哈!谢谢:-) 听起来像我需要一个不可变的视图。 – skrebbel 2010-03-17 09:23:14
嗯,标准库支持不可变视图吗? :-) – skrebbel 2010-03-17 09:26:45
为什么'我的解决方案'可能?我错过了什么(请看下面的答案) – 2010-03-17 09:39:32