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 :

Classes génériques


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Classes génériques
    Bonjour,

    Je reformule, en essayant d'être plus simple dans ma demande.

    J'ai 2 implémentations de dao liées par héritage.

    ex : Dao2 extends Dao1
    ainsi que leur interface respective liées par héritage elles aussi.

    j'ai 2 factory pour instantier ces dao

    1ere factory dans une méthode create:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ....
    iDao1 = new Dao1<T, K>(.....)
    ....
    2eme factory dans une méthode create
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    IDao2= new Dao2<T, K>(.....)
    ...
    dans le main on appelle comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // instanciation de la classe Dao1
    Idao1 dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    Idao2 dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);
    En fait chaque factory s'occupe d'instancier une implémentation spécifique d'une dao.

    Est ce possible d'avoir qu'une seul factory quelques soit le type dao à instancier ?
    Comment puis je faire avec du generic ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ncckto Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // instanciation de la classe Dao1
    Idao1 dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    Idao2 dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);
    Salut

    En fait, je ne comprend pas bien où sont instanciés tes DAO dans ce code.
    La je vois une instanciation de factory1 et factory2, mais dans ce code dao1 et dao2 restent nulle.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    En fait, je ne comprend pas bien où sont instanciés tes DAO dans ce code.
    La je vois une instanciation de factory1 et factory2, mais dans ce code dao1 et dao2 restent nulle.
    Bonjour,
    J'utilise Spring (et d'autowired) et hibernate, d'où le coté un peut magique du code

    et oui tu as raison j'ai omis du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // là c'est mieux
    // instanciation de la classe Dao1
    IDao1<Toto, Long> dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    IDao2<Toto, Long> dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);

    une factory au complet est écrite comme ceci :

    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
    @Repository("daoFactory1")
    public class DaoFactory1 implements IDaoFactory1 {
     
     
      /** l'attribut session factory. */
      @Autowired
      private SessionFactory sessionFactory;
     
      /** l'attribut hibernate template. */
      @Autowired
      private HibernateTemplate hibernateTemplate;
     
      /**
       * Constructeur generic dao factory.
       */
      public DaoFactory1 () {
        super();
      }
     
     
     
      @SuppressWarnings("unchecked")
      public <T, K extends Serializable> IDao1<T, K> create(Class<T> pType, Class<K> pKey) {
    // appel du constructeur de la Dao
        Object vObject = new Dao1<T, K>(this.sessionFactory, this.hibernateTemplate, pType) {
        };
     
      return (IDao1<T, K>) JamonDaoProxy.getProxy(IDao1.class, pType, vObject);
      }
     
    }
    pour la factory 2 c'est la meme chose, sauf que le type de retour de la méthode create est , et instanciée avec .

    Comme elles se ressemble beaucoup, j'ai idée de factoriser en une seul factory. Mais comment faire avec du générique ?
    Y as il une solution peut être plus simple ?

Discussions similaires

  1. Utilisation d'une classe générique
    Par bandit_debutant dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2006, 16h54
  2. Réponses: 3
    Dernier message: 05/10/2006, 17h15
  3. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  4. [C#][ADO] Classe Générique ADO
    Par tscoops dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/11/2005, 14h21
  5. [Generics] Classe générique
    Par norkius dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 15h57

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