选角集合<一些类>到集合<一些超级类>

2022-09-01 20:45:17

我相信以前已经回答过这个问题,但我真的找不到它。

我有一个java类和一个抽象类。 延伸。SomeClassSomeSuperClassSomeClassSomeSuperClass

另一个抽象方法具有返回 .在实现类中,我有一个Collection<SomeSuperClass>Collection<SomeClass> myCollection

我知道我不能只是返回,因为不能继承。尽管如此,我知道里面的一切都是因为毕竟,它们是扩展的对象。myCollectionCollection<SomeClass>Collection<SomeSuperClass>myCollectionSomeSuperClassSomeClassSomeSuperClass

我怎样才能做到这一点?

即我想要

public class A
{
  private Collection<SomeClass> myCollection;

  public Collection<SomeSuperClass> getCollection()
  {
    return myCollection; //compile error!
  }
}

我发现的唯一方法是通过非泛型类型进行转换,并获得未经检查的警告等等。但是,一定有更优雅的方式吗?我觉得也不需要使用和朋友,因为静态地确定返回的集合只包含对象(在向下转换而不是向上转换时不是这种情况,但这不是我正在做的)。我错过了什么?Collections.checkedSet()SomeClass

谢谢!


答案 1

不会做你想做的事?Collection<? extends SomeSuperClass>


答案 2

你不能这么做。您有一个 Collection<SomeClass> 并希望返回一个 Collection<SuperClass>

现在想象一下,有人有你返回的集合 - 他们试图插入一个不同的超类子类,SomeOtherClass。这应该在你的SuperClass集合上被允许 - 但它不能,因为它实际上是一个集合<SomeClass>,除了A的私人成员之外,任何人都不知道。


推荐