Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 10h25   #1
ncckto
Invité de passage
 
Inscription : juillet 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 8
Points : 3
Points : 3
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 :
1
2
3
....
iDao1 = new Dao1<T, K>(.....)
....
2eme factory dans une méthode create
Code :
1
2
3
...
IDao2= new Dao2<T, K>(.....)
...
dans le main on appelle comme ceci :
Code :
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 ?
ncckto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 00h27   #2
Enerian
Membre expérimenté
 
Homme Etienne
Ingénieur développement logiciels
Inscription : août 2011
Messages : 113
Détails du profil
Informations personnelles :
Nom : Homme Etienne
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2011
Messages : 113
Points : 517
Points : 517
Citation:
Envoyé par ncckto Voir le message
Code :
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.
Enerian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 08h35   #3
ncckto
Invité de passage
 
Inscription : juillet 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 8
Points : 3
Points : 3
Citation:
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 :
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 :
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 ?
ncckto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h25.


 
 
 
 
Partenaires

Hébergement Web