2012-04-02 55 views
10

下面的代碼編譯使用JDK6(我試過1.6.0_24相互自引用類型參數在JDK6下編譯但不是7?

class XY<A extends XY<A, B>, B extends XY<B, A>> { } 

但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 

燦任何人都可以指出這是否是對Java的泛型的有意改變

+0

它編譯罰款

它,當你切換通用變量的例子出現對於我來說Java> = 1.7.0_02 – 2012-04-02 15:21:54

+0

真的嗎?你確定?我正在使用** 1.7.0_02-b13 ** – 2012-04-02 15:35:59

+0

這很有趣。它使用Java 7功能在Eclipse中進行編譯。我嘗試通過命令行,果然我得到了相同的編譯器錯誤。 – 2012-04-02 15:49:34

回答

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>> { } 

它不會出現在此:

class XY<A extends XY<A, B>, B extends XY<A, B>> { } 
class XY<A extends XY<B, A>, B extends XY<B, A>> { } 

,你可以在這裏看到另外一個例子:http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html

相關問題