Подтвердить что ты не робот

Взаимные параметры саморегуляции, скомпилированные под JDK6, но не 7?

Следующий код компилируется с использованием JDK6 (я пробовал 1.6.0_24)

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?

4b9b3361

Ответ 1

Кажется, что ошибка, возникающая из 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