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

Collection et Stream Java Discussion :

[ArrayList] Préciser le typage d'une liste


Sujet :

Collection et Stream Java

  1. #1
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut [ArrayList] Préciser le typage d'une liste
    j'ai 3 classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NameObject
    User extend NameObject
    Group extend NameObject
    et 3 classes liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NameObjects extend ArrayList<NameObject>
    Users extend NameObjects
    Groups extend NameObjects
    le pb c'est qu'en utilisant cette architecture une liste Users peut contenir des User et des Group, alors que je voudrait que Users contiennent uniquement des User, tout en gardant les traitement en commun pour Users et Groups.
    en fait il me faudrait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NameObjects extend ArrayList<NameObject>
    Users extend NameObjects<User>
    Groups extend NameObjects<Group>
    Évidemment ce n'est pas possible, et j'aimerai savoir si ya un moyen de s'en approcher à part en ne faisant pas étendre Users et Groups de NameObjects (je perd la généralisation de certain traitements)
    Qqun a une idée?

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Tu peux peut-être faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    interface Listable { ... }
    class User implements Listable { ... }
     
    class NameObject<T extends Listable> extends ArrayList<Listable> { ... }
    class Users extends NameObject<User> { ... }
    class Groups extends NameObject<Listable> { ... }

  3. #3
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    Citation Envoyé par soft0613 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class NameObject<T extends Listable> extends ArrayList<Listable> { ... }
    Je crois que ya un copier coller en trop là nan?

  4. #4
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    pourquoi je vois pas où est le problème ?

  5. #5
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class NameObject<T extends Listable> extends ArrayList<Listable> { ... }
    c'est quoi le "T" avant le extends Listable?

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    C'est le type de ta liste.

    Ca précise que si tu veux déclarer un NameObject<T> le T ne pourra être que du type Listable ou ses descendants.

    F.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le T indique qu'il s'agit d'une classe générics, dont le type T étends Listable...

    Mais perso je ferais plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class NameObjects<T extends Listable> extends ArrayList<T> { ... }
    Cela permet de conserver la généricité sur les méthode de ArrayList...



    Mais j'ai une question : la classe NameObjects apporte-t-elle de nouvelles fonctionnalité par rapport à ArrayList ? Parce que sinon autant utilisé directement une ArrayList...


    a++

  8. #8
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Exact pour la précision du "... extends ArrayList<T>". Je me suis posé la même question que toi à propos de la classe NameObject mais dans le doute autant faire comme ça en plus si il y a besoin de rajouter des fonctionnalités par la suite la hiérarchie est déjà faite.

  9. #9
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Mais j'ai une question : la classe NameObjects apporte-t-elle de nouvelles fonctionnalité par rapport à ArrayList ? Parce que sinon autant utilisé directement une ArrayList...
    oui oui ya des méthodes en plus, sinon effectivement elle n'aurait pas lieu d'exister! je vais essayer votre méthode et je vous tien au courant!

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

Discussions similaires

  1. préciser le pas d'une liste en Perl ?
    Par zoscoy dans le forum Programmation et administration système
    Réponses: 11
    Dernier message: 26/11/2014, 17h03
  2. trier une liste d'objets dans une ArrayList
    Par sandrine49 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2008, 08h59
  3. Afficher une liste déroulante (:select) avec une ArrayList
    Par tompalmeras dans le forum Struts 2
    Réponses: 3
    Dernier message: 28/04/2008, 21h15
  4. [ArrayList] contains() sur une liste de String
    Par nicotine002 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/01/2008, 19h19
  5. Réponses: 21
    Dernier message: 21/03/2007, 05h18

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