绑定不匹配泛型

时间:2012-09-18 10:59:43

标签: java generics

我有以下类层次结构。

头等

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>

我真的很担心上面的错误。你能解释一下为什么会出现这种编译错误吗?

3 个答案:

答案 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中的SecondStringT中的ThirdSecond<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>>();
   }
}