IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Generics en java


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 28
    Par défaut Generics en java
    Bonjour,

    Je suis entrain de préparer la certif ocjp, je suis tombé sur un cas qui m'intrigue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<? extends Object> liste=new ArrayList<Integer>();
    c'est une liste qui peut prendre n'importe quel objet,et donc le
    new ArrayList<Integer>() est correct.

    et ceci ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Integer obj=new Integer(4);
    liste.add(obj);
    Voici ce qui est écrit dans le bouquin de Catyhy Siera:
    List<Object> refers only to a List<Object>, while List<?> or
    List<? extends Object> can hold any type of object, but for access only.
    et je comprends donc que je ne peux pas faire de add(...) à ma liste
    et dans ce cas,comment peut on alimenter la liste?!!!

    J'espère avoir été clair, et merci pour votre aide



    Cordialement

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par limalima Voir le message
    c'est une liste qui peut prendre n'importe quel objet
    Non, c'est une liste dont on ne sait pas ce qu'elle peut prendre.
    Par conséquent, si tu as un objet, on ne sait pas si elle peut prendre cet objet, donc tu n'as pas le droit de le mettre dedans.

    Citation Envoyé par limalima Voir le message
    et je comprends donc que je ne peux pas faire de add(...) à ma liste
    et dans ce cas,comment peut on alimenter la liste?!!!
    Cette liste vient de quelque part avant d'avoir été assignée à une variable List<?>. Ce quelque part n'était pas un List<?> mais pouvait par exemple être un List<Integer>. À ce moment-là, en utilisant cette variable-là, tu pouvais mettre des Integer dedans.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static List<?> createList() {
      // accès / ajout
      List<Integer> list = new ArrayList<>();
      list.add(1);
      list.add(2);
      list.add(3);
      return list;
    }
     
    public static void main(String... args) {
      // accès seulement
      List<?> list = createList();
      System.out.println(list);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 28
    Par défaut Merci,
    Bonjour,
    Merci, c'est plus claire.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Generics en java:certification OCJP
    Par limalima dans le forum Général Java
    Réponses: 1
    Dernier message: 27/09/2013, 11h41
  2. librairie generic en Java
    Par cLaSic dans le forum OpenGL
    Réponses: 0
    Dernier message: 05/03/2008, 00h28
  3. List Generics en Java & Reverse
    Par pomauguet dans le forum BOUML
    Réponses: 5
    Dernier message: 10/05/2007, 19h01
  4. Generic et java 1.6
    Par guis14 dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2007, 15h57
  5. Generics et héritage avec Java 5.0 Tiger
    Par euyeusu dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2007, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo