我有
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.
当我构成第三个时,我想要将通用参数赋给SomeConcreteClass(或其派生类),如果我提供了不属于SomeConcreteClass继承的类型,则抛出运行时错误层次结构.
我会认为第二个声明中的规范将简单地向下传播,即它应该在第三个声明(和任何实例化)中隐含.
有什么错误?
解决方法
所有你需要的是
public class Third<T extends SomeConcreteClass> extends Second<T>
你只需要重新定义绑定.它不像你想像的那样传播.
(我不是这个原因的积极因素,但我有一些猜测 – 如果它是第三个< T>扩展第二个< Foo>?T上的适当的界限是不明显的,如果甚至是一个,所以它不会自动传播;你必须指定它.)