1

我有以下类层次结构。

头等舱

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>

我真的对上述错误感到困惑。你能解释一下为什么会出现这个编译错误吗?

4

3 回答 3

2

T extends First<T>与 不同Second<String>,因为 T 既绑定到扩展的对象,也绑定到String扩展的对象First<T>

我感觉你想在第三个中使用不同的参数,做类似的事情

class Third<T extends First<?>> {
}
于 2012-09-18T11:07:13.267 回答
1

Augusto 走在正确的轨道上,但为了避免使用通配符?,您可以向您的类添加另一个类型参数Third

class Third<U, T extends First<U>> {
    // ...
}

Third<String, Second<String>> name = new Third<>();

缺点是您必须String在类型参数中提及两次。

于 2012-09-18T11:54:12.590 回答
0

您的作业中的混淆是Tin SecondisStringTin Thirdis Second<String>。因此,为了使分配有效,Second<String>应该扩展First<Second<String>>. 但情况并非如此Second<String>extends 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>>();
   }
}
于 2012-09-18T11:42:06.767 回答