多级Java通用继承使用扩展通用参数

Eng*_*eer 13 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
Run Code Online (Sandbox Code Playgroud)

我得到编译时错误

Type argument T is not with bounds of type-variable T.
Run Code Online (Sandbox Code Playgroud)

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

我认为声明中的规范Second只会向下传播,即它应该隐含在声明(以及任何实例化)中Third.

有什么错误?

Lou*_*man 19

所有你需要的是

public class Third<T extends SomeConcreteClass> extends Second<T>
Run Code Online (Sandbox Code Playgroud)

你只需要重新指定绑定.它不像你想象的那样传播.

(我不是肯定的原因,但我有一些猜测 - 如果它是Third<T> extends Second<Foo<T>>什么?适当的限制T是不明显的,如果有一个.所以相反,它只是不会自动传播;你必须指定它.)