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的泛型的故意改变?
这似乎是来自 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