我敢肯定这已经得到回答,但是我真的找不到。
我有一个Java类SomeClass
和一个抽象类SomeSuperClass
。 SomeClass
扩展了SomeSuperClass
。
另一个抽象方法具有一个返回Collection<SomeSuperClass>
的方法。在实现类中,我有一个Collection<SomeClass> myCollection
我知道我不能只返回myCollection
,因为Collection<SomeClass>
不会从Collection<SomeSuperClass>
继承。不过,我知道myCollection
中的所有内容都是SomeSuperClass
,因为毕竟它们是扩展了SomeClass
的SomeSuperClass
对象。
我该如何工作?
即我想要
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
我发现的唯一方法是通过非泛型类型进行转换,并获得未经检查的警告和其他信息。但是,必须有一种更优雅的方法吗?我觉得也不需要使用
Collections.checkedSet()
和 friend ,因为从静态上确定返回的集合仅包含SomeClass
对象(当向下转换而不是向上转换时不是这种情况,但这不是我要做的事情)。我想念什么?谢谢!
最佳答案
你做不到您有一个Collection ,并希望返回Collection
现在想象某人有您返回的Collection-他们尝试插入SuperClass的另一个子类SomeOtherClass。这应该在您的SuperClass集合上被允许-但这是不允许的,因为它实际上是Collection ,除了A的私有(private)成员之外,其他任何人都不知道。