0% ont trouvé ce document utile (0 vote)
0 vues2 pages

Java Generics Summury

Ce document présente les concepts fondamentaux de la généricité en Java, incluant la syntaxe de base, le mécanisme d'effacement de type, et les interdictions à respecter. Il aborde également les méthodes génériques, les bornes sur les paramètres, et les jokers pour gérer la non-covariance. Enfin, il souligne l'importance de la sécurité des types à la compilation pour éviter les erreurs d'exécution.

Transféré par

mohamedbnz90
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues2 pages

Java Generics Summury

Ce document présente les concepts fondamentaux de la généricité en Java, incluant la syntaxe de base, le mécanisme d'effacement de type, et les interdictions à respecter. Il aborde également les méthodes génériques, les bornes sur les paramètres, et les jokers pour gérer la non-covariance. Enfin, il souligne l'importance de la sécurité des types à la compilation pour éviter les erreurs d'exécution.

Transféré par

mohamedbnz90
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

L'Essentiel du Cours : La Généricité en Java

Fiche de Révision Technique — Format Condensé

1. Objectif Fondamental & Syntaxe


• But unique : Écrire un code source unique pour manipuler des types d'objets quelconques de manière sécurisée.
• Avantage : Sécurité des types à la compilation (Type Safety). Supprime le besoin de transtypage manuel ( cast ) et
élimine tout risque de ClassCastException à l'exécution.
• Syntaxe de base :

public class Boite<T> {


private T x;
public T getX() { return x; }
public void setX(T x) { this.x = x; }
}

• Règle stricte des types : Seuls les types objets sont acceptés. Interdiction d'utiliser des types primitifs ( int , double ,
etc.). Utiliser les classes enveloppes ( Integer , Double ).
• Raw Types (Types Bruts) : Instancier sans spécifier le type (ex: Boite b = new Boite(); ) rétrograde T en Object ,
désactive la sécurité et génère un avertissement à la compilation.

2. Mécanisme Interne : L'Effacement de Type (Type Erasure)


• La Machine Virtuelle Java (JVM) ne connaît pas la généricité (préservation de la compatibilité ascendante).
• Le compilateur effectue la vérification des types, puis efface toutes les informations génériques (les chevrons) dans le
bytecode.
• Les types non bornés deviennent Object . Les types bornés prennent le type de leur borne supérieure. Le compilateur
ajoute lui-même les instructions de cast nécessaires.

3. Les 6 Interdictions Absolues à retenir


1. Interdit d'instancier directement un type générique : T obj = new T();
2. Interdit de créer un tableau de type générique : T[] tab = new T[10];
3. Interdit de créer un tableau d'instances génériques spécifiques : Boite<Integer>[] t = new Boite<Integer>[5];
4. Interdit d'utiliser instanceof paramétré : if (b instanceof Boite<String>) (Seul b instanceof Boite est
légal).
5. Interdit de créer une classe d'exception générique : class MyException<T> extends Exception .
6. Interdit de déclarer des variables statiques de type T : static T variable; (partagé par toutes les instances).

4. Méthodes Génériques
• Une méthode peut définir ses propres paramètres de types, indépendamment de sa classe. Le paramètre se place
obligatoirement avant le type de retour :

public static <T> T getMilieu(T[] tab) { return tab[[Link] / 2]; }

• Appel explicite : Permet de forcer le type si l'inférence automatique du compilateur échoue ou doit être verrouillée :
NomClasse.<String>getMilieu(monTab);

5. Bornes sur les Paramètres (Bounded Types)


• Borne Supérieure ( <T extends Type> ) : Limite le type aux sous-classes ou implémentations de Type . Après
effacement, le bytecode remplace T par Type au lieu d' Object .
• Bornes multiples : Combinées avec l'opérateur & (ex: <T extends Classe & Interface1 & Interface2> ). La
classe doit impérativement figurer en première position.
• Borne Inférieure ( <T super Type> ) : Limite le type générique à Type ou à l'une de ses super-classes (classes
parentes).

POO2 - Résumé Généricité en Java 1


6. Héritage et Non-Covariance (Le Piège de l'Examen)

Règle d'or : Même si Integer hérite de Number , Boite<Integer> n'a aucun lien de parenté avec
Boite<Number> .
L'affectation suivante provoque une Erreur de compilation immédiate :
Boite<Number> b = new Boite<Integer>(); // FAUX et INTERDIT

• Extension de classe générique : Une sous-classe doit obligatoirement propager au moins les paramètres requis par sa
super-classe : class Enfant<T> extends Parent<T> .

7. Les Jokers (Wildcards '?')

Utilisés exclusivement lors de la déclaration de variables, de champs ou de paramètres (jamais avec l'opérateur new ) pour
résoudre le problème de la non-covariance :

Syntaxe du Joker Désignation Usage Précis & Comportement

Représente un type totalement inconnu. Utilisé pour la


Boite<?> Joker non borné lecture seule. Les éléments récupérés sont traités comme
de type Object .

Représente T ou l'une de ses sous-classes. Permet la


Boite<? extends T> Borne Supérieure lecture sécurisée des méthodes propres à T . Interdiction
stricte d'y ajouter des éléments.

Représente T ou l'une de ses super-classes. Conçu


Boite<? super T> Borne Inférieure spécifiquement pour l'écriture sécurisée dans une
structure (ex: [Link](instanceDeT); ).

POO2 - Résumé Généricité en Java 2

Vous aimerez peut-être aussi