我有以下类层次结构。
头等
class First<T> {
}
第二课
class Second<T> extends First<T> {
}
第三类
class Third<T extends First<T>> {
}
错误行:
Third<Second<String>> name = new Third<Second<String>>();//Compilation error
Bound mismatch: The type Second<String> is not a valid substitute for the
bounded parameter <T extends First<T>> of the type Third<T>
我真的很担心上面的错误。你能解释一下为什么会出现这种编译错误吗?
答案 0 :(得分:2)
T extends First<T>
与Second<String>
不同,因为T既绑定了String
又绑定了First<T>
。
我觉得你想在第三个中使用不同的参数,做像
这样的事情class Third<T extends First<?>> {
}
答案 1 :(得分:1)
Augusto走在正确的轨道上,但为了避免使用通配符?
,您可以在班级Third
中添加其他类型参数:
class Third<U, T extends First<U>> {
// ...
}
Third<String, Second<String>> name = new Third<>();
缺点是您必须在类型参数中提及String
两次。
答案 2 :(得分:0)
您的作业中的混淆是T
中的Second
为String
,T
中的Third
为Second<String>
。因此,为了使作业有效,Second<String>
应该延长First<Second<String>>
。但Second<String>
扩展First<String>
并非如此。以下代码按预期编译:
public class Test {
static class First<T> {
}
static class Second<T> extends First<Second<T>> {
}
static class Third<T extends First<T>> {
}
public static void main(String... args) {
Third<Second<String>> name = new Third<Second<String>>();
}
}