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

avec Java Discussion :

Définition de la méthode add ?


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut Définition de la méthode add ?
    Bonjour,

    j'aimerais trouver la définition de la méthode public boolean add(E) qui est déclarée dans l'interface Collection<E> si j'ai bien compris. J'ai regardé sur internet et ce serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean add(E element){
        throw new UnsupportedOperationException();
    }
    Cette méthode est définie ds AbstractCollection<E>, mais je comprends pas très bien le code: elle se résume à lever une exception ok mais où est le code correspondant à ajouter l'élément ???
    Merci.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    - Il n'y a pas de définition pour Collection, parce que Collection est une interface, et que le principe d'une interface c'est d'annoncer les méthodes qu'elles propose, sans les définir.

    - La définition dans AbstractCollection ne fait rien d'autre que lancer une Exception, parce que c'est le comportement le plus utile pour une Collection dont on a pas précisé si c'est un Set, une List, autre chose, et s'il n'y a pas des contraintes dessus (comme par exemple que cette collection ne puisse pas être modifiée ou que sa taille doive être constante.)

    - Si tu veux un exemple de méthode add(), il faut regarder pour quelle classe concrètement, et non pas pour les interfaces qu'elle implémente ou pour ses classes parentes. Parce que ce ne sera jamais pareil.
    Par exemple HashSet, TreeSet, ArrayList, LinkedList, etc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    cela dit, "add" pour une Collection, en principe ça ajoute un élément à une Collection, ou alors les mots n'ont plus de sens...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Oui, et "démarrer" pour un appareil, en principe ça démarre l'appareil, sinon ça ne veut plus dire grand-chose.
    Il n'en reste pas moins que démarrer une télé et démarrer un tracteur se font de manière complètement différente et ont des effets qui n'ont rien à voir l'un avec l'autre. Pourtant l'appareil a bel et bien été démarré et l'un des effets et qu'il est à présent utilisable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par JoeChip Voir le message
    cela dit, "add" pour une Collection, en principe ça ajoute un élément à une Collection, ou alors les mots n'ont plus de sens...
    D'ou le "UnsupportedOperationException" qui exprimer clairement que l'AbstractCollection n'a pas la moindre idée de comment effectuer le add().

    Ceci dit, il aurait probablement été plus propre que la méthode reste abstraite

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Propre certainement, pratique ça se discute.

    À chaque fois que je crée une nouvelle Collection, je suis bien content de ne pas devoir me copier/coller encore une fois la méthode add() avec son throw new UnsupportedOperationException.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je crée rarement des nouvelles classes collections, et encore plus rarement des nouvelles collections en lecture seule

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Bah dès qu'on a un objet dont le but est essentiellement d'en contenir d'autres... Moi si j'ai une Matrice => extends Collection. Une grille à coordonnées pseudo-infinies => extends Collection.
    Certes des méthodes toArrayList() ou juste étendre Iterable plutôt que Collection, c'est plus facile. Mais c'est aussi moins confortable pour le filer à tout ce qui existe déjà.

    (Accessoirement, read-only et refuser qu'on ajoute un élément sans dire où, ce sont deux choses différentes. Exemples : Arrays.asList(), Map.keySet()...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est vrai qu'en général, je travail en sens inverse. Je crée ma classe modèle, elle contient un champ genre List<Item> items; puis je fais bouton droit -> generate delegate methods, puis au final je rejoute le implement List
    Du coup j'ai rarement besoin de passer par AbstractCollection.

    Par contre, pour les tableau, je préfère utiliser le asList(), qui fait déjà tout le travail

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Ok.
    Je suis allé dans la classe ArrayList, dans le "Constructor detail" je trouve bien la méthode public boolean add(E e) mais où est le code de cette méthode ?
    Merci.

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu ouvre ton eclipse

    tu écrit

    ArrayList a = new ArrayList();
    a.add("Hello");

    et tu fait ctrl-click tu "add", eclipse va t'ammener directement au code de la méthode

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    J'ai mis ce code dans une classe quelconque (en important java.util.ArrayList), mais quand je fait CTRL-CLICK sur add, ça m'ouvre ArrayList.class où il y a marqué:
    Source not found
    The jar file C/.../rt.jar has no source attachment
    You can attach the source by clicking Attach Source below.

    Je clique dessus, mais je vois pas trop quoi faire (ss faire de bêtise).

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu actionnes le bouton "Attach source", tu vas dans le dossier d'installation du JDK, tu sélectionnes le fichier src.zip...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    je suis allé ds le dossier d'installation du jdk parcouru pas mal de dossiers mais j'ai pas trouvé de fichier src.zip: je suppose qu'il faut le télécharger ?
    (décidément rien n'est simple ^^)

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Le code source fait partie de l'installation du JDK. Il est possible de demander à ne pas l'installer, et du coup tu te retrouves sans src.zip. Mais c'est uniquement parce que tu l'as voulu quand tu as installé le JDK. Relance l'installeur et demande-lui, cette fois, de mettre les sources avec.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et normalement eclipse devrait trouver les sources comme un grand. Sauf si tu as associé un jre à ton projet au lieu d'associer un jdk

    Sinon, le code dans ArrayList est tout con:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        public boolean add(E e) {
            ensureCapacityInternal(size + 1);  // Increments modCount!!
            elementData[size++] = e;
            return true;
        }
     
     
        private void ensureCapacityInternal(int minCapacity) {
            modCount++;
            // overflow-conscious code
            if (minCapacity - elementData.length > 0)
                grow(minCapacity);
        }
     
     
        private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Ok pour le code de add (enfin^^)
    Merci !

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

Discussions similaires

  1. Méthode add() de l'objet select
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2008, 14h01
  2. Méthode add de l'objet AllowEditRange fonctionne... maintenant
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/09/2007, 12h58
  3. méthode add dans une classe héritant de ArrayList
    Par sliderman dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 05/06/2007, 09h27
  4. [Zip] Erreur avec la méthode add() de PclZip
    Par Anduriel dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 20/01/2007, 16h42
  5. surcharge de la méthode Add d'une List
    Par Anto03 dans le forum C#
    Réponses: 4
    Dernier message: 19/01/2007, 14h12

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