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 :

Utilisation du type dynamique des objets


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut Utilisation du type dynamique des objets
    Bonjour,

    Je me retrouve confronter à un problème que je n'arrive pas à résoudre.

    Voici la structure de mon code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class A {
     
    }
     
    public class B1 extends A {
     
    }
     
    public class B2 extends A {
     
    }
     
    public interface I<E extends A> {
      public void method(E param);
    }
     
    public abstract class K<E extends A> implements I<E> {
     
    }
     
    public class C1 extends K<B1> {
      public void method(B1 param) {
     
      }
    }
     
    public class C2 extends K<B2> {
      public void method(B2 param) {
     
      }
    }
     
    public class D {
      public void d() {
        // La method getK() retourne un objet de type K (c'est-à-dire de type C1 ou C2)
        // La method getA() retourne un objet de type A (c'est-à-dire de type A, B1 ou B2)
        getK().method(getA()); // comment faire pour que ça marche ? 
      }
    }
    Je souhaite appeler une méthode sur un objet dont je connais le type et avec un paramètre dont je ne connais pas non plus le type.

    Quelle solution s'offre à moi ?

    Merci d'avance

  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
    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 D<E extends A> {
      public void d() {
        getK().method(getA());
      }
     
      K<E> getK() {
        // implémentation qui renvoie un K correspondant
      }
     
      E getA() {
        // implémentation qui renvoie un E correspondant.
      }
    }
    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
    15
    16
    17
    18
    19
    20
    21
    22
    public class D<E extends A> {
     
      private final K<E> k;
      private final E a;
     
      public D(K<E> k, E a) {
        this.k = k;
        this.a = a;
      }
     
      public void d() {
        getK().method(getA());
      }
     
      K<E> getK() {
        return k;
      }
     
      E getA() {
        return a;
      }
    }
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D<B1> d = new D<B1>(new C1(), new B1());
    d.d();
    Après, tout dépend de la situation réelle.

    Ce qu'il faut comprendre, c'est que s'il y a une solution à ton problème, ce sont les génériques. Mais si tu veux t'en servir, tu vas devoir les apprendre, c'est comme ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut
    Citation Envoyé par thelvin Voir le message
    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 D<E extends A> {
      public void d() {
        getK().method(getA());
      }
     
      K<E> getK() {
        // implémentation qui renvoie un K correspondant
      }
     
      E getA() {
        // implémentation qui renvoie un E correspondant.
      }
    }
    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
    15
    16
    17
    18
    19
    20
    21
    22
    public class D<E extends A> {
     
      private final K<E> k;
      private final E a;
     
      public D(K<E> k, E a) {
        this.k = k;
        this.a = a;
      }
     
      public void d() {
        getK().method(getA());
      }
     
      K<E> getK() {
        return k;
      }
     
      E getA() {
        return a;
      }
    }
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D<B1> d = new D<B1>(new C1(), new B1());
    d.d();
    Après, tout dépend de la situation réelle.

    Ce qu'il faut comprendre, c'est que s'il y a une solution à ton problème, ce sont les génériques. Mais si tu veux t'en servir, tu vas devoir les apprendre, c'est comme ça.
    Merci pour ta solution, je l'ai adaptée à mon projet et ça marche très bien.

    Je pense que je vais suivre la leçon sur les generics sur le site d'Oracle, ça à l'air d'être un mécanisme assez puissant et qui peut résoudre de nombreux problèmes.

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

Discussions similaires

  1. Créer dynamiquement des objets Java
    Par choko83 dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 02/05/2008, 14h53
  2. [Débutant] Creer dynamiquement des objets
    Par Uragiru dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 29/04/2008, 19h46
  3. Réponses: 1
    Dernier message: 17/04/2007, 14h43
  4. utilisations de pointeurs sur des objets
    Par niarkyzator dans le forum Delphi
    Réponses: 21
    Dernier message: 13/12/2006, 09h42
  5. Créer une GUI et insérer dynamiquement des objets
    Par nix74 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/11/2006, 09h04

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