2012-04-02 6 views
10

Il seguente codice compilato usando JDK6 (ho provato 1.6.0_24)Parametri di tipo reciprocamente autoreferenziali compilati sotto JDK6 ma non 7?

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

Ma compilazione sotto JDK7 (ad es 1.7.0), ottengo questo errore:

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 

Can qualcuno punta a se si tratta di una modifica intenzionale ai generici di Java?

+0

Si compila bene per me con Java> = 1.7.0_02 –

+0

Davvero? Sei sicuro? Sto usando ** 1.7.0_02-b13 ** –

+0

Questo è divertente. Si sta compilando in Eclipse con le funzionalità di Java 7. L'ho provato tramite la riga di comando e ho ottenuto lo stesso errore del compilatore. –

risposta

4

Sembra che si tratti di un bug proveniente da OpenJDK e causato da un errore nella sostituzione della variabile di tipo.

Essa appare quando si passa variabili generiche per gli esempi:

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

Non appare in questo:

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

è possibile vedere un altro esempio qui: http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html

Problemi correlati