Selon Java Generics FAQ http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ302 un paramètre de type ne peut pas être tournées vers l'référencés de cette manièreForward Référence du type de paramètre en Java Generics
<A extends B, B> // error
mais il est correct d'avoir
<A extends List<B>, B> // ok
Ces deux exemples sont vérifiés avec la dernière jdk 1.6.0_24
. Ma question est, où dans la spécification de la langue cela est spécifié, implicite, ou déductible (c'est-à-dire si elle est fausse, d'autres choses peuvent exploser). Je ne peux le trouver nul part.
Mise à jour
En javac7, il est autorisé. Intuitivement, l'ordre des paramètres de type n'a pas d'importance; le système de type requiert qu'il n'y ait pas de dépendances cycliques parmi les variables de type: <A extends B, B extends A>
. Auparavant, cela peut être garanti en interdisant la référence vers l'avant. Apparemment javac 7 est amélioré pour relâcher la commande, tout en détectant les cycles indépendamment de la commande.
Il semble donc que cette règle soit bien connue par les génériques java, mais ils ont oublié de la mettre dans la spécification du langage. – irreputable