0

Main有一个子类SubMain

Foo有一个子类SubFoo

Main

public List<Foo> getFoo() { return null; }

SubMain

@Override
public List<SubFoo> getFoo() { return this.subfoo; }

虽然在List<SubFoo>. 我想错了吗?以下是一些让我认为这可行的来源。

http://en.wikipedia.org/wiki/Covariant_return_type

https://stackoverflow.com/a/10134596/1747491

4

2 回答 2

5

考虑:

public List<? extends Foo> getFoo() { return null; }

如前所述Edwin, aList<SubFoo>不是 a 的子类,List<Foo>因为您无法将 of 添加Foo到 a List<SubFoo>

其他选项:

public class Main<T extends Foo>{
   public List<T> getFoo();
}

public class SubMain extends Main<SubFoo>{
  public List<SubFoo> getFoo();
}

SubMain返回一个List<Foo>

于 2013-09-17T15:54:19.887 回答
1

List<SubFoo>不是 的子类型List<Foo>,而是ArrayList<Foo>的子类型List<Foo>

Generics 链接

解决方案:

你可以做类似的事情List<? extends Foo> getFoo()

查看Wildcards and Subtyping链接了解更多

于 2013-09-17T15:58:19.300 回答