java - 使用泛型参数扩展的多级 Java 泛型继承

标签 java generics

我有

public class First<T> {}

public class Second<T extends SomeConcreteClass> extends First<T> {}

public class Third<T> extends Second<T> {} //Compile-time error

编译时出错

Type argument T is not with bounds of type-variable T.

当我构造一个 Third 时,我希望能够将泛型参数作为 SomeConcreteClass(或其派生类),并且对于运行时错误如果我提供的类型不属于 SomeConcreteClass 的继承层次结构,则会被抛出。

我认为 Second 声明中的规范会简单地向下传播,即它应该隐含在 Third 的声明(和任何实例化)中。

错误是什么?

最佳答案

你只需要

public class Third<T extends SomeConcreteClass> extends Second<T>

您只需要重新指定边界。它不会像您想象的那样传播。

(我不确定这是什么原因,但我有一些猜测——如果它是 Third<T> extends Second<Foo<T>> 会怎么样?T 上的适当界限并不明显,如果有的话。所以改为,它只是不会自动传播;您必须指定它。)

关于java - 使用泛型参数扩展的多级 Java 泛型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560980/

相关文章:

java - 空类中带有引用结果的自定义 Ant 类型

java - 使用 Swing 创建图像是线程安全的吗?

java - 获取文件名的正则表达式

delphi - 为shortstring声明泛型内联函数const是用户错误,还是编译器错误?

java - Spring data - 域对象继承和泛型方法

java - 快速检查数据库中是否存在一组项目

java - Eclipse 中的实时协作

go - 我可以在 Golang 中基于另一个类型参数来约束一个类型参数吗?

c# - 更新对象的通用方法错误( Entity Framework 4)

c# - 返回列表 1 和列表 2 中的项目匹配的列表