Types generiques [Java 1.5] - Java - Programmation
Marsh Posté le 11-06-2004 à 20:27:56
ben là ce que tu veux faire c'est écrire une classe générique => http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Marsh Posté le 07-07-2004 à 12:06:26
benou a écrit : ben là ce que tu veux faire c'est écrire une classe générique => http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf |
Merci, je viens de regarder et a ce que j'ai compris on declare la classe ainsi :
|
et maintenant, je pourrais utiliser le type T pour les variables a l'interieur de la classe uneClasse. C'est bien ca ? parce que ca compile pas ce truc (ca m'indique une erreur de syntaxe, il manque une '}') le '<T>' ca lui plait pas , comment corrige cela ?
Marsh Posté le 07-07-2004 à 12:41:53
faut pas rajouter -source 1.5 à la commande de compilation ?
Marsh Posté le 07-07-2004 à 12:46:51
raytaller a écrit : faut pas rajouter -source 1.5 à la commande de compilation ? |
Bon merci, entre temps j'a v reinstaller et j'ai oublie de remettre cette option de compilation.
Merci
Marsh Posté le 07-07-2004 à 13:34:31
|
Je n'ai pas compris ce qui est en gras. kk1 peut m'expliquer
EDIT : apparemment ils font une distinction entre le type generique T d'une collection qui lui N'EST PAS considere comme un Object et le type reel d'un element de la collection qui lui est toujours comme un Object.
Pkoi cette difference ?
Marsh Posté le 07-07-2004 à 15:54:44
Giz a écrit : |
Parce que dans ce cas, Foo et Bar sont des CLASSES et que le Générique G est une META-CLASSE.
Foo et Bar interviennent comme des paramètres au niveau de G et non comme des objets.
Même si on peut faire un parallèle entre classe->instance de classe et meta-classe->classe, y'a des choses qui ne se passent pas pareil dans le 2eme cas.
La relation naturelle d'héritage au niveau des générique est (en admettant que Foo dérive de Bar):
H<Foo> dérive de G<Foo> et pas G<Foo> dérive de G<Bar>
Marsh Posté le 07-07-2004 à 18:09:42
Merci Pascal34 pour ta reponse
Je viens de lire la doc, et je tente d'utiliser ces fameux types generiques. Mais bon je me confronte aux problemes de syntaxe maintenant
Voila mon cas :
soit la classe abstraite suivante (contenant entre autres une fonction):
|
soit la classe suivante (heritant de la classe ci-dessus) :
|
He bien la syntaxe de la classe ci-dessus merde completement (celle de la 1ere est OK!)
Ce sont ces fameux types T qui font tous merde et qui me provoquent les erreurs de compilation. KK1 connait la syntaxe ?
Marsh Posté le 07-07-2004 à 19:37:53
Bon je viens de trouver l'erreur . En fait il faut remplacer T par le type que l'on desire (normal). Ce qui est bete c'est que je ne peux utilisez les type basique (int, char, ...), il veut une reference.
C'est normal ca ?
Si oui, alors comment je resouds mon probleme du 1er message ?
Pour etre direct : comment hash-t-on un type basique (int, char...) en Java ?
Marsh Posté le 07-07-2004 à 20:14:54
Bon je viens d'avoir la reponse parfaite a ma question
si ca vous interesse... :
|
url : http://javaalmanac.com/egs/java.lang/GetHash.html
Marsh Posté le 08-07-2004 à 15:43:51
Bien maintenant les types generiques me confrontent a la structure de mon programme
Voila comment ce dernier se presente :
Un probleme est defini par une classe abstraite qui fourni un modele de ce que doit contenir au minimum la classe TSP (= le probleme a proprement dit) :
|
De facon completement independante, je dispose d'une classe de strategie (ici AntSystem) pour resoudre un probleme quelconque donne en argument.
|
Et enfin, je dispose d'une classe SearchProblem qui permet la "fusion" en faisant coordonner le probleme et la strategie.
|
Le probleme est dans la fonction isEnd defini dans la classe SearchProblem. Cette fonction, implementee par SearchProblem, est appelee dans le code de la classe AntSystem. Or la LinkedList path contient des etats du probleme TSP, etats qui eux sont de type Integer. Seulement seule la classe TSP sait que ce sont des etats de type Integer. Par consequent, la fonction isEnd implementee dans la classe SearchProblem ne peut identifier le type d'un element dans la LinkedList path recu en argument de la part de l'appel a cette fonction dans la classe AntSystem.
Ce que je voudrais donc c'est que les classes AntSystem et SearchProblem soient capables d'identifier le type T du probleme (ici pour le probleme TSP, le type est Integer). Comment puis-je faire ?
J'espere avoir ete clair ! (Sinon demandez moi !)
Merci
Marsh Posté le 03-08-2004 à 13:51:13
Giz a écrit :
|
t'as essayé de paramétrer ta classe TSP par le type T ?.
Car ta classe TSP doit être un générique et elle n'était paramétrée par rien du tout !
Marsh Posté le 11-06-2004 à 19:35:09
Je travaille avec Java 1.5. Dans la doc java, pour la classe Hashtable, la méthode put a le prototype suivant :
public V put(K key, V value)
cette classe implemente l'interface Map<K,V>.
J'utilise cette classe. Ce qu'il y a de tres pratique c'est que les methode (et dont put () ) accepte comme key un type K. Je ne sais pas trop ce que signifie ce type generique mais cela permet de donner comme cles a hacher des strings, des int, des pointeurs, etc...
Dans mon programme, j'utilise une table de hashage. Seulement la cle que je dois hachée, c l'utilisateur qui me la donne. Or j'ai "fixé" le type de la cle (cle que me donne en argument l'utilisateur) a "Object" : j'ai aucune idee de ce que peut etre le type reel de la cle, c l'utilisateur qui me passera sa cle a hacher. Par consequent, je suis condamne qu'a hacher des adresses d'Object. J'aimerais bien faire comme la classe Hashtable, c'est a dire que la cle que l'utilisateur me donne soit de ce fameux type "K" qui correspond a tout type. Seulement, comment l'utiliser ce type K ? (par exemple si je mets une instruction, "K key = null;", ca passe pas du tout)
Comment faire ? Merci.
Message édité par Giz le 07-07-2004 à 12:06:48