Généricité
Les types paramétrés : collection d'un type donné, classe et méthode génériques, contrôle des types à la compilation, types enveloppes et borne d'un paramètre de type.
- 24 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Généricité : de quoi s'agit-il ?
Voir la réponse
Mécanisme qui écrit une classe ou une méthode une seule fois pour des types choisis à l'utilisation, avec contrôle par le compilateur.
List<String>etList<Integer>viennent de la même classeList<E>. Sans elle, il faudrait une classe par type ou desObjectpartout, avec des transtypages risqués.Que répond le compilateur à
noms.add(3);quandnomsest uneList<String>?incompatible types: int cannot be converted to String- Rien :
3est converti en"3"et ajouté ClassCastExceptionà l'exécution, quand on relira l'élémentcannot find symbol : method add(int)
Voir la réponse
incompatible types: int cannot be converted to StringLe type
Stringest connu à la compilation, donc l'erreur est signalée à la ligne fautive. Java ne convertit pas unintenStringà la place du programmeur ; il faudrait écrireString.valueOf(3).Un paramètre de type doit être une … : on écrit List<…> et jamais List<int>.
Voir la réponse
Un paramètre de type doit être une classe : on écrit List<Integer> et jamais List<int>.
Le compilateur répond "unexpected type, required: reference, found: int". Le type enveloppe de
doubleestDouble, celui debooleanestBoolean, celui decharestCharacter.Paramètre de type : de quoi s'agit-il ?
Voir la réponse
Nom, souvent T, E ou K, qui représente dans une classe ou une méthode un type encore inconnu, fixé au moment de l'utilisation.
class Boite<T>déclareT;new Boite<String>(...)le fixe àString. Dans la classe,Ts'écrit comme un type : attributT valeur, retourT get().Une classe
Piledoit ranger des entiers dans un programme et des chaînes dans un autre, avec un contrôle des types à la compilation. Quelle conception choisir ?- Une classe
Pilequi range desObject, avec transtypage à la lecture - Une classe générique
Pile<T> - Deux classes recopiées,
PileEntiersetPileChaines - Une classe
Pilequi range desStringet convertit les entiers
Voir la réponse
Une classe générique
Pile<T>Pile<T>s'écrit une fois et le compilateur vérifie chaque usage. La versionObjectcompile mais reporte les erreurs à l'exécution ; deux classes recopiées doublent la maintenance sans rien gagner.- Une classe