De acuerdo con los genéricos de Java FAQ http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ302 un parámetro de tipo no puede ser hacia adelante con referencias de esta maneraadelante Referencia del Tipo de parámetro en Java Generics
<A extends B, B> // error
pero es aceptable tener
<A extends List<B>, B> // ok
Estos dos ejemplos se verifican con la última jdk 1.6.0_24
.
Mi pregunta es, cuando en la especificación del idioma esto se especifica, implícita o deducible (es decir, si no es cierto, otras cosas pueden explotar). No puedo encontrarlo por ninguna parte.
actualización
En javac7, está permitido. Intuitivamente, el orden de los parámetros de tipo no importa; el sistema de tipo requiere que no haya dependencias cíclicas entre las variables de tipo: <A extends B, B extends A>
. Anteriormente, esto puede garantizarse prohibiendo la referencia directa. Aparentemente javac 7 se mejora para relajar el orden, mientras se detectan ciclos independientemente de ordenar.
Parece que esta regla es bien conocida por los chicos de genéricos de java, pero se olvidaron de ponerla en la especificación del idioma. – irreputable