java - 我认为这会因为协变返回类型而起作用?

标签 java covariance

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

最佳答案

考虑:

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

Edwin州,a List<SubFoo>不是 List<Foo> 的子类因为您无法添加 FooList<SubFoo> .

其他选项:

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

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

或制作SubMain返回 List<Foo>

关于java - 我认为这会因为协变返回类型而起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854353/

相关文章:

java - Android 服务器 PC 客户端

java - EJB3 事务回滚

java - 基本抽象数据类型程序

C++ - 覆盖虚函数和多态性

c# - C# 中的继承 - 简单问题

scala - 具有逆变输入参数编译错误的流处理器过滤函数

java - 地址解析

C#返回类型协变和里氏代换原则

c# - 将 IFoo<T> 转换为 IFoo<object> 的一般方法

java - HTMLEditorKit 在 JEditorPane HTML 中修改我的文本