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

Langage Java Discussion :

Conteneur générique et types des objets contenus


Sujet :

Langage Java

  1. #1
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut Conteneur générique et types des objets contenus
    Salut,

    Alors voilà, je veux coder une classe conteneur qui peut accueillir plusieurs types de données. Donc, je pars sur une implémentation générique (classe paramétrée) pour éviter ensuite de recaster dans tous les sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MonConteneur(<T> extends StructureNode {
     
    	private T value;
     
    	public MonConteneur(T value) {
    		super();
    		this.value = value;
    	}
    	// autres fonctions ...
    }
    Mais mon problème est que je veux aussi pouvoir avoir accès au type paramétré de mon conteneur pour une raison de présentation dans une GUI. Et là, avec une bête classe paramétrée, ce n'est pas possible à cause de l'erasure.
    Pour palier à ça, voilà ma solution un peu à la rache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MonConteneur(<T> extends StructureNode {
     
    	private T value;
    	private Class type;
     
    	public MonConteneur(T value) {
    		super();
    		this.value = value;
    		this.type = value.getClass();
    	}
    	// autres fonctions ...
    }
    En testant vite-fait ça semble marcher. À la construction, je récupère le type de l'objet à mettre dans mon conteneur. Ainsi, je conserve l'information sur le type du contenu.

    Vous en pensez quoi ? Y a-t-il une autre solution ?

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par bobuse
    En testant vite-fait ça semble marcher. À la construction, je récupère le type de l'objet à mettre dans mon conteneur. Ainsi, je conserve l'information sur le type du contenu.

    Vous en pensez quoi ? Y a-t-il une autre solution ?
    Cela ne fonctionne pas tout à fait car tu as le type réel de l'objet et non pas le type paramétré <T>. Par exemple dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonConteneur<Number> mc = new MonConteneur<Number>(new Integer(0));
    Tu obtiendras Integer à la place de Number...



    Une solution serait d'utiliser un paramètre Class<T> obligatoire lors de la construction de ton objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public MonConteneur(T value, Class<T> type) {
    		super();
    		this.value = value;
    		this.type = type;
    		if (this.type==null) {
    			throw new NullPointerException("type is null");
    		}
    	}
    Que tu utiliserais ensuite comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonConteneur<Number> mc = new MonConteneur<Number>(new Integer(0), Number.class);

    Si les types ne correspondent pas, tu auras bien sûr une erreur de compilation...


    a++

  3. #3
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Oui tout à fait, d'ailleurs au début j'étais parti sur cette solution (sisi c'est vrai). Mais dans mon cas, le type du contenu me suffit, car a priori, le type de mon contenu sera le même que le type paramétré.

    merci. Donc mon idée était pas mauvaise

  4. #4
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    sinon pourquoi ne pas faire :

    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 class MonConteneur(<T> extends StructureNode {
    	
    	private T value;
    	private Class type;
     
    	public MonConteneur(T value) {
    		super();
    		this.value = value;
    		this.type = T.class ;
    	}
    	// autres fonctions ...
    }
    'm'a l'air plus simple, non ?


    Hope it helps !

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1

Discussions similaires

  1. Type des objets contenu dans un datatable
    Par lasrevinu dans le forum C#
    Réponses: 4
    Dernier message: 20/05/2010, 12h47
  2. Recordset : Type des objets retournés
    Par Carlito78 dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2009, 12h04
  3. préciser le type des objets dans une classe dérivée d'arraylist
    Par JCD21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/06/2008, 18h04
  4. FileSystemObject et type des objets
    Par hpfx dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/10/2007, 23h50
  5. AD et type des objets retournés .
    Par Luffy49 dans le forum C#
    Réponses: 10
    Dernier message: 16/07/2007, 23h05

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