Délimiter les génériques avec le mot-clé contravariant 'Super'
Dans les génériques Java, le mot-clé 'super' joue un rôle essentiel dans l'établissement de sous-types pour paramètres de type. Cependant, il ne peut être utilisé qu'avec des caractères génériques et non avec des paramètres de type nommés. Cela soulève une question courante : pourquoi ?
Pourquoi pas avec les paramètres de type ?
La raison pour laquelle « super » ne peut pas être utilisé avec des paramètres de type est qu'une telle contrainte serait inefficace pour prévenir un comportement inattendu. Object, la superclasse ultime de tous les types de référence, rendrait toute « super » limite hypothétique dénuée de sens dans la pratique.
Par exemple, considérons la méthode hypothétique suivante dans l'interface Collection :
<code class="java"><S super T> S[] toArray(S[] a);</code>
Tenter de déclarer une telle méthode échouerait au moment de la compilation. Même si cela était autorisé, cela n’atteindrait pas son objectif. Étant donné que tous les tableaux de type référence sont des tableaux d'objets, n'importe quel type de tableau peut être utilisé comme argument, rendant la limite « super » inefficace.
Conséquences pour les tableaux
Génériques et les tableaux ont une relation complexe, et l'absence de « super » limites pour les paramètres de type nommé le reflète. Bien qu'il puisse sembler souhaitable de restreindre les tableaux de paramètres uniquement à ceux comportant des superclasses du type paramétré, cela n'est pas possible pour les tableaux.
Par exemple, une 'Liste
Conclusion
En fin de compte, l'exclusion du mot-clé 'super' des paramètres de type nommé dans les génériques Java est due aux limitations inhérentes aux tableaux dans le contexte des génériques. En interdisant de telles limites, Java empêche les développeurs de créer des contraintes potentiellement trompeuses qui ne parviendraient finalement pas à fournir les garanties de sécurité souhaitées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!