Génériques délimitants avec mot-clé « super » : une explication complète
Les génériques Java permettent la sécurité des types et la réutilisabilité du code. Un aspect des génériques est la délimitation de type, où un paramètre de type peut être limité à une relation de sous-type spécifique. Cependant, contrairement aux caractères génériques, les paramètres de type ne peuvent pas être limités à l'aide du mot-clé 'super'.
Dans l'interface Collection, la méthode toArray prend un argument de type 'S[]', 'S' étant un paramètre de type. La question se pose de savoir pourquoi la méthode n'est pas déclarée comme '' au lieu d'un caractère générique ''.
La réponse réside dans le comportement du « super » bounding. Alors que 'super' est généralement utilisé avec des caractères génériques (<'? super T'>), son application aux paramètres de type (<'' au lieu de '>) a une conséquence involontaire. Object est la superclasse de tous les types de référence, ce qui signifie que 'Object[]' est un argument valide pour '<'S super T>>' au moment de la compilation. Cela va à l'encontre de l'objectif de la limite, car n'importe quel argument de type référence pourrait être transmis, même ceux qui ne sont pas des sous-classes de « T ».
Par conséquent, une « super » limite sur les paramètres de type ne fournirait pas la protection attendue contre arguments invalides. Pour illustrer, la méthode hypothétique '<> S[] toArray(S[] a)' avec '
Cette limitation découle de l'interaction entre les génériques et les tableaux. Les génériques et les tableaux ont des règles de covariance différentes, conduisant au comportement observé.
Il est important de noter que cette limitation s'applique uniquement aux paramètres de type. Les caractères génériques peuvent toujours être liés à l'aide de « super » pour exprimer la variance, comme le montre « < » ? super T> ;' dans la méthode toArray, permettant une plus grande flexibilité.
Pour plus d'informations sur les génériques et la délimitation des types, reportez-vous aux ressources suivantes :
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!