我敢肯定这已经得到回答,但是我真的找不到。

我有一个Java类SomeClass和一个抽象类SomeSuperClassSomeClass扩展了SomeSuperClass

另一个抽象方法具有一个返回Collection<SomeSuperClass>的方法。在实现类中,我有一个Collection<SomeClass> myCollection
我知道我不能只返回myCollection,因为Collection<SomeClass>不会从Collection<SomeSuperClass>继承。不过,我知道myCollection中的所有内容都是SomeSuperClass,因为毕竟它们是扩展了SomeClassSomeSuperClass对象。

我该如何工作?

即我想要

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)成员之外,其他任何人都不知道。

09-10 03:56