Les génériques sont un moyen de créer des classes et des méthodes de type sécurisé qui peuvent fonctionner sur différents types d'objets pour détecter les erreurs de type au moment de la compilation plutôt qu'au moment de l'exécution.
Il est introduit dans la version 5.2
classe publique GenericClass{élément T final privé ; public GenericClass (élément T) {this.item = élément ; } public T getItem() {élément de retour ; } }
private staticvoid printItem (élément T) {System.out.println (item.toString ()); }
Il est utilisé pour restreindre ou lier certains types ou leurs sous-types.
Cela nous permettra d'invoquer des méthodes de classes ou d'interfaces limitées.
private staticdouble add (T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
C'est une fonctionnalité qui permet au compilateur de déterminer automatiquement le type de méthode générique ou de paramètre de constructeur.
Listlist = new ArrayList<>();
Il s'agit d'un symbole >
utilisé pour représenter un argument de type inconnu.
private static void printItemsInList(List> list) {for (Object item : list) {System.out.println(item); } }
Il est utilisé pour spécifier que l'argument type doit être un sous-type d'une certaine classe ou interface.
Il est utilisé pour accéder aux éléments.
private static void printItemsInList(List extends Number> list) {for (Number number : list) {System.out.println(number); } }
Il est utilisé pour spécifier que l'argument type doit être un supertype d'une certaine classe ou interface.
Il est utilisé pour modifier les éléments.
Liste super Number> nombres = new ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
Type de sécurité
les types de données sont corrigés au moment de la compilation plutôt qu'à l'exécution, ce qui rend le code plus robuste et fiable.
Réutilisation du code
écrivez des classes et des méthodes pouvant fonctionner avec plusieurs types de données, ce qui peut contribuer à réduire la quantité de code que vous devez écrire.
Performance
améliorez les performances en réduisant le besoin de conversions de type et en évitant la surcharge liée à la vérification du type à l'exécution.
Tapez l'effacement
il s'agit d'une fonctionnalité clé qui efface le code générique au moment de l'exécution, ce qui peut limiter l'utilité des génériques dans certaines situations.
Prise en charge limitée des types primitifs
Les génériques en Java ne prennent pas directement en charge les types primitifs, tels que int ou double. Au lieu de cela, vous devez utiliser leurs classes wrapper correspondantes, telles que Integer ou Double. Cela peut être moins efficace que de travailler directement avec des types primitifs.
Complexité
peut ajouter de la complexité au code qui utilise des hiérarchies de types complexes et des types génériques.