我有
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/