在JDK6下编译的相互自引用类型参数但不是7?

oxb*_*kes 10 java generics types

以下代码使用JDK6编译(我试过1.6.0_24)

class XY<A extends XY<A, B>, B extends XY<B, A>> { } 
Run Code Online (Sandbox Code Playgroud)

但是在JDK7下编译(例如1.7.0),我得到了这个错误:

XY.java:1: error: type argument B is not within bounds of type-variable A
class XY<A extends XY<A, B>, B extends XY<B, A>> {
                                      ^
  where B,A are type-variables:
    B extends XY<B,A> declared in class XY
    A extends XY<A,B> declared in class XY
1 error
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出这是否是对Java的泛型的故意改变

Luc*_*uca 4

这似乎是来自 OpenJDK 的一个错误,是由类型变量替换中的错误引起的。

当您切换通用变量时,它会出现,例如:

class XY<A extends XY<A, B>, B extends XY<B, A>> { } 
class XY<A extends XY<B, A>, B extends XY<A, B>> { } 
Run Code Online (Sandbox Code Playgroud)

它没有出现在这个:

class XY<A extends XY<A, B>, B extends XY<A, B>> { } 
class XY<A extends XY<B, A>, B extends XY<B, A>> { } 
Run Code Online (Sandbox Code Playgroud)

您可以在这里看到另一个示例:http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html