Génériques Java
Les génériques Java sont une nouvelle fonctionnalité introduite dans JDK 5. Les génériques fournissent un mécanisme de vérification de la sécurité de type à la compilation qui permet aux programmeurs de détecter les types illégaux au moment de la compilation.
L'essence des génériques réside dans les types paramétrés, c'est-à-dire que le type de données sur lequel on opère est spécifié comme paramètre.
Supposons que nous ayons une exigence comme celle-ci : écrire une méthode de tri qui peut trier des tableaux d'entiers, des tableaux de chaînes, ou même des tableaux de tout autre type. Comment cela peut-il être mis en œuvre ?
La réponse est d'utiliserles génériques Java。
En utilisant le concept des génériques Java, nous pouvons écrire une méthode générique pour trier un tableau d'objets. Ensuite, appelez cette méthode générique pour trier des tableaux d'entiers, des tableaux de nombres à virgule flottante, des tableaux de chaînes, etc.
Méthodes génériques
Vous pouvez écrire une méthode générique qui peut recevoir des paramètres de types différents lorsqu'elle est appelée. En fonction des types d'arguments passés à la méthode générique, le compilateur gère chaque appel de méthode de manière appropriée.
Voici les règles pour définir des méthodes génériques :
- Toutes les déclarations de méthodes génériques ont une section de déclaration de paramètres de type (délimitée par des chevrons). Cette section de déclaration de paramètres de type apparaît avant le type de retour de la méthode (dans l'exemple ci-dessous, le<E>)。
- Chaque section de déclaration de paramètre de type contient un ou plusieurs paramètres de type, séparés par des virgules. Un paramètre générique, également appelé variable de type, est un identifiant utilisé pour spécifier un nom de type générique.
- Les paramètres de type peuvent être utilisés pour déclarer des types de retour et peuvent servir de substituts aux types de paramètres réels obtenus par la méthode générique.
- La déclaration du corps d’une méthode générique est identique à celle des autres méthodes. Notez que les paramètres de type ne peuvent représenter que des types de référence, et non des types primitifs (tels queint、double、charetc.).
Marqueurs génériques en Java :
- E- Élément (utilisé dans les collections, car les collections stockent des éléments)
- T- Type (classe Java)
- K- Clé
- V- Valeur
- N- Nombre (type numérique)
- ?- représente un type Java indéterminé
Exemple
L’exemple suivant montre comment utiliser une méthode générique pour afficher des éléments de tableau de différents types :
Exemple
Compilez le code ci-dessus, et le résultat de l'exécution est le suivant :
整型数组元素为: 1 2 3 4 5 双精度型数组元素为: 1.1 2.2 3.3 4.4 字符型数组元素为: H E L L O
Paramètres de type bornés :
Il peut arriver que vous souhaitiez restreindre la plage de types pouvant être passés à un paramètre de type. Par exemple, une méthode qui opère sur des nombres peut ne vouloir accepter que des instances de Number ou de ses sous-classes. C'est le but des paramètres de type bornés.
Pour déclarer un paramètre de type borné, listez d'abord le nom du paramètre de type, suivi du mot-clé extends, puis sa borne supérieure.
Exemple
L'exemple suivant montre comment "extends" est utilisé au sens général de "extends" (classes) ou "implements" (interfaces). La méthode générique de cet exemple renvoie le maximum de trois objets comparables.
Exemple
Compilez le code ci-dessus, et le résultat de l'exécution est le suivant :
3, 4 和 5 中最大的数为 5 6.6, 8.8 和 7.7 中最大的数为 8.8 pear, apple 和 orange 中最大的数为 pear
Classes génériques
La déclaration d'une classe générique est similaire à celle d'une classe non générique, sauf qu'une section de déclaration de paramètre de type est ajoutée après le nom de la classe.
Comme les méthodes génériques, la section de déclaration des paramètres de type d'une classe générique contient également un ou plusieurs paramètres de type, séparés par des virgules. Un paramètre générique, également appelé variable de type, est un identifiant utilisé pour spécifier un nom de type générique. Comme elles acceptent un ou plusieurs paramètres, ces classes sont appelées classes paramétrées ou types paramétrés.
Exemple
L'exemple suivant montre comment nous définissons une classe générique :
Exemple
Compilez le code ci-dessus, et le résultat de l'exécution est le suivant :
整型值为 :10 字符串为 :Example
Jokers de type
1. Les jokers de type utilisent généralement?pour remplacer des paramètres de type spécifiques. Par exempleList<?>est logiquementList<String>,List<Integer>et toutes lesList<arguments de type spécifiques>classes parentes.
Exemple
Le résultat de sortie est:
data :icon data :18 data :314
Analyse :Parce quegetData()le paramètre de la méthode estList<?>type, doncname,age,numberpeuvent tous être utilisés comme arguments de cette méthode ; c'est le rôle des jokers.
2. La borne supérieure du joker de type est définie par la forme List extends Number> pour la définir. Définie de cette façon, la valeur générique du joker accepte Number et ses types de sous-classes en dessous.
Exemple
Résultat de sortie :
data :18 data :314
Analyse :Dans//1Une erreur se produira à la position cargetUperNumber()le paramètre de la méthode a déjà limité la borne supérieure générique du paramètre àNumber, donc le type générique étantStringn'est pas dans cette plage, donc une erreur est signalée.
3. La borne inférieure du joker de type est définie via la formeList<? super Number>pour la définir, ce qui signifie que le type ne peut accepter queNumberet ses types de superclasses au-dessus, commeObjectinstances du type.
Autres extensions