Faciliter le changement de ma structure de données

Faciliter le changement de ma structure de données - Java - Programmation

Marsh Posté le 13-04-2006 à 09:47:35    

Bonjour !
 
Je suis en train de créer une structure de données et je voudrai faire des tests entre plusieurs type d'implémentation.
Par exemple je voudrai faire des comparaison entre l'utilisation, dans ma sdd, de Vector/ArrayList, Hashtable/HashMap, etc...
 
j'utilise des méthodes compatibles entre les types, donc je peux passer de l'un à l'autre sans aucun problème.
 
Ma question concerne justement le passage rapide d'un type à un autre.
Par exemple je voudrai passer de :
 

Code :
  1. final public Hashtable uneTable = new Hashtable();


 
à  
 

Code :
  1. final public HashMap uneTable = new HashMap();


 
Le problème c'est que ce changement devrai s'appliquer à plusieurs dizaines d'endroits dans mon code. J'aurai donc voulu créer quelques chose qui, au final, agirait comme ca :
 

Code :
  1. UnType = Hashtable


 

Code :
  1. final public unType uneTable = new unType();


 
Quelqu'un aurait une idée ?
J'espère que vous avez compris ce que je veux :-)
 
Merci !

Reply

Marsh Posté le 13-04-2006 à 09:47:35   

Reply

Marsh Posté le 13-04-2006 à 10:09:07    

HashMap et Hashtable utilisent l'interface java.util.Map.
Vector et ArrayList utilisent l'interface java.util.List
 

Code :
  1. List uneListe = new Vector();
  2. uneListe = new ArrayList();
  3. Map uneTable = new HashMap();
  4. uneTable = new Hashmap();

Reply

Marsh Posté le 13-04-2006 à 10:15:33    

Je crois que je n'ai pas été trés clair dans mes explications.
 
Je sais bien qui implémente qui. Mais je voudrais pouvoir passer d'une implémentation (Vector - Hashtable) à une autre (ArrayList - HashMap) facilement et rapidement, en évitant de reporter la modification à travers toutes mes classes.
 
C'est pourquoi j'aurai aimé qu'à chaque fois que je déclare/instancie un objet de type List et qu'à chaque fois que je déclare/instancie un objet de type Map, une variable/constante (que je place manuellement) soit consultée pour savoir si il faut utiliser l'une ou l'autre des implémentations.
 
J'aimerai donc que je puisse me dire que je passe de HashMap à Hashtable en modifiant une seule variable dans mon code. (cette variable est consultée à l'éxécution pour voir si il faut créer des HashMap ou des hashtable).
 
J'espère que c'est plus clair :-)


Message édité par ikao2 le 13-04-2006 à 10:15:59
Reply

Marsh Posté le 13-04-2006 à 14:37:40    

En fait, pour être plus explicite, je voudrais arriver au résultat suivant, mais en moins lourd :
 

Code :
  1. import java.util.*;
  2. public class Liste {
  3. private List theList;
  4. public Liste() {
  5.  //Vector theList = new Vector();
  6.  ArrayList theList = new ArrayList();
  7. }
  8. public List getTheList() {
  9.  return theList;
  10. }
  11. }

Reply

Marsh Posté le 13-04-2006 à 15:06:48    

Comme ça alors ?
 

Code :
  1. import java.util.*;
  2. public class Liste {
  3.   // varaible à changer à la main pour choisir entre Vector à ArrayList
  4.   private static final boolean utiliseVector = true;
  5.   private List theList;
  6.   public Liste() {
  7.     theList = utiliseVector ? new Vector() : new ArrayList();
  8.     /* Juste au cas où certain ne comprennent pas la notation inline, la ligne ci-dessus est équivalente à :
  9.     if (utiliseVector) {
  10.       theList = new Vector();
  11.     } else {
  12.       theList = new ArrayList();
  13.     }
  14.     */
  15.   }
  16.   ...
  17. }

Reply

Marsh Posté le 13-04-2006 à 15:22:58    

:hello:  
 
merci !
 
C'est toujours "lourd" dans le sens ou il y a toujours une classe créée pour cela, mais c'est un peu moins lourd que moi.
Enfin je crois que ce que je veux faire n'est pas vraiment réalisable, donc je vais prendre cette solution.
 
Merci pour l'explicitation de la notation inline que je n'avais effectivement plus en tête le fonctionnement...

Reply

Marsh Posté le 11-05-2006 à 10:53:12    

Salut.
 
La réponse est un peu tardive, mais elle me semblait néanmoins intéressante, si jamais tu la lis à temps.
 
Le mot-clé est "généricité" !
 
Google te donnera pas mal d'indications à ce sujet (tu peux également rechercher "polymorphisme" ).
Une explication sommaire, qui te montrera que c'est bien exactement ce que tu cherches à faire :
http://cowww.epfl.ch/proginfo/wwwe [...] cite_6.pdf
 
Attention, c'est du Java 5.0.


Message édité par seigneurao le 11-05-2006 à 11:39:24
Reply

Marsh Posté le 11-05-2006 à 17:33:25    

je n'ai pas encore regardé, mais si tu parles des <Generic>, je comptais les utiliser :)
 
Enfin merci pour le lien, si c'est bien expliqué ca me sera utile !

Reply

Marsh Posté le 11-05-2006 à 18:29:11    

Il s'agit effectivement bien de l'utilisation des chevrons <type> pour spécifier des méthodes acceptant plusieurs types de paramètres.
Si j'ai bien compris ta demande initiale, ça devrait satisfaire à tes besoins.

 

Bon codage :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed