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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. 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> et List<Integer> viennent de la même classe List<E>. Sans elle, il faudrait une classe par type ou des Object partout, avec des transtypages risqués.

  • Que répond le compilateur à noms.add(3); quand noms est une List<String> ?

    • incompatible types: int cannot be converted to String
    • Rien : 3 est converti en "3" et ajouté
    • ClassCastException à l'exécution, quand on relira l'élément
    • cannot find symbol : method add(int)
    Voir la réponse

    incompatible types: int cannot be converted to String

    Le type String est connu à la compilation, donc l'erreur est signalée à la ligne fautive. Java ne convertit pas un int en String à la place du programmeur ; il faudrait écrire String.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 double est Double, celui de boolean est Boolean, celui de char est Character.

  • 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éclare T ; new Boite<String>(...) le fixe à String. Dans la classe, T s'écrit comme un type : attribut T valeur, retour T get().

  • Une classe Pile doit 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 Pile qui range des Object, avec transtypage à la lecture
    • Une classe générique Pile<T>
    • Deux classes recopiées, PileEntiers et PileChaines
    • Une classe Pile qui range des String et 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 version Object compile mais reporte les erreurs à l'exécution ; deux classes recopiées doublent la maintenance sans rien gagner.