我有
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是不明显的,如果有一个.所以相反,它只是不会自动传播;你必须指定它.)