Question :Pourquoi le mot-clé « super » ne peut-il pas être utilisé pour paramètres de type liés, contrairement aux caractères génériques ?
Réponse :
La délimitation d'un paramètre de type avec « super » (par exemple, « ») n'est pas autorisée dans Java, car il aurait effectivement un impact négligeable sur le type lié et ne servirait pas son objectif.
Considérez le code hypothétique suivant :
interface Collection<T> { <S super T> S[] toArray(S[] a); }
Ce code propose que la méthode 'toArray' dans l'interface 'Collection' doit avoir un paramètre de type 'S' qui est un supertype de 'T'. Cependant, cette limite n'aurait aucun sens car chaque type est un supertype de « Objet », et comme un tableau de n'importe quel type de référence peut être converti en un « Objet[] », le compilateur permettrait à n'importe quel tableau d'être passé comme argument à 'toArray', qu'il s'agisse ou non d'un sous-type prévu.
Par conséquent, l'utilisation de 'super' pour lier les paramètres de type n'empêcherait pas les erreurs d'exécution, telles que 'ArrayStoreException'. En tant que tel, il n'est pas autorisé dans le système de types de Java.
Exemple :
Considérons une méthode générique hypothétique :
<T super Integer> void add(T number)
Cette méthode vise pour autoriser l'ajout de "entiers", de "nombres" et d'"objets" (car ce sont tous des superclasses de "Integer") mais interdire les "chaînes" car elles ne le sont pas. Cependant, étant donné que « Object » est une superclasse de « Integer », des « chaînes » peuvent toujours être ajoutées en raison d'un casting implicite, entraînant des erreurs d'exécution potentielles.
Considérations supplémentaires :
Ressources associées :
Tutoriels Java/Génériques
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!