Pour les pro du Java... une petite question sur les types!

Pour les pro du Java... une petite question sur les types! - Programmation

Marsh Posté le 29-10-2001 à 19:27:40    

Salut à tous!
 
Je suis en train de commencer mon travail de fin d'étude en Java et petit à petit, je découvre ce merveilleux langage... mais:
 
En utilisant les List et autres structures fournies dans java.util, j'obtiens des erreurs de conversion de type à la compilation.  
 
En effet, les fonctions fournies commme  
 
public Object get(int index)
 
renvoient un type "Object" et.. si on place la valeur de retour dans une variable qui a le véritable type des éléments(par exemple List si on a une liste de listes)et PAF, une erreur!  
:??:  
Que faire? Y a-t-il une astuce? Faut-il créer soit même une fonction de conversion? Comment faire?
 
Merci d'avance. :wahoo:

 

[edtdd]--Message édité par phoenyx--[/edtdd]

Reply

Marsh Posté le 29-10-2001 à 19:27:40   

Reply

Marsh Posté le 29-10-2001 à 20:24:27    

La conversion d'une instance d'une classe en une instance d'une autre classe s'appelle le transtypage, en Java ca marche comme ça:
 
Vector v = new Vector();
v.add("toto" );
String nom = (String) v.firstElement();
 
En Java on ne peut pas typer les collections, tu dois donc indiquer le type que tu veux avoir à chaque récupération d'un élément. ( Ca va peut-être changer un jour car c'est en cours de discussion au JCP JSR : Add Generic Types To The JavaTM Programming Language)

Reply

Marsh Posté le 29-10-2001 à 20:34:42    

En anglais, on utiliseras le terme "cast" pour designer cette methode. Tu trouveras plein de docs sous ce terme la.

Reply

Marsh Posté le 29-10-2001 à 20:46:28    

Merci beaucoup pour ta réponse... mais...
 
Mon problème est que le type des objet que j'ai placé dans la collection est un type que j'ai défini, appelons-le Node.
Ce Node est un type complexe puisqu'il s'agit en fait d'une classe avec plein de champs!
Mon problème est que le procédé que tu m'as indiqué ne fonctionne donc pas! Par exemple:
 
Node void Lecture(Vector v) { //Avec v contenant déjà des Node
  Node n= new Node();  
  Node n= (Node) v.firstElement();
  return(n);
}

Reply

Marsh Posté le 30-10-2001 à 09:27:59    

phoenyx a écrit a écrit :

Merci beaucoup pour ta réponse... mais...
 
Mon problème est que le type des objet que j'ai placé dans la collection est un type que j'ai défini, appelons-le Node.
Ce Node est un type complexe puisqu'il s'agit en fait d'une classe avec plein de champs!
Mon problème est que le procédé que tu m'as indiqué ne fonctionne donc pas! Par exemple:
 
Node void Lecture(Vector v) { //Avec v contenant déjà des Node
  Node n= new Node();  
  Node n= (Node) v.firstElement();
  return(n);
}  




 
Déjà, si tu évitais de déclarer ta fonction avec "Node void...", et que tu mettais simplement "Node Lecture(Vector v) {..."
je crois que ca irais bcp mieux :)
Si ça ne fonctionne toujours pas, indique nous le message d'erreur exacte qui t'es retourné.
 
@+

Reply

Marsh Posté le 30-10-2001 à 09:29:55    

Je n'avais meme pas lu le code jusqu'au bout, il y a d'autres erreurs.
En voici un qui syntaxiquement devrait être correct :
 
Node Lecture(Vector v) { //Avec v contenant déjà des Node
 Node n= new Node();  
 n= (Node) v.firstElement();
 return(n);
}

Reply

Marsh Posté le 30-10-2001 à 11:10:44    

Node n= new Node();    
n= (Node) v.firstElement();  
 
 
c'est con ça, ça sert à quoi de créer un new Node si c'est pour pas s'en servir ?

Reply

Marsh Posté le 30-10-2001 à 11:15:08    

pab29 a écrit a écrit :

Node n= new Node();    
n= (Node) v.firstElement();  
 
 
c'est con ça, ça sert à quoi de créer un new Node si c'est pour pas s'en servir ?  




exact :)

Reply

Marsh Posté le 31-10-2001 à 00:27:48    

je dirais même plus :  
 
public Node lecture(Vector v) {  
 return (Node) v.firstElement();  
}

Reply

Marsh Posté le 21-12-2001 à 10:39:13    

Je dirai qu'en plus, si tu retourne toujours le premier élément ça sert à rien !! Je verrais plutot :  
 
public Node[] lecture(Vector v)
{  
  Node[]      l_Nodes = new Node[v.size()];
  Enumeration l_Objects = v.elements();
  int         l_Index   = 0;
  while (l_Objects.hasModeElement())
     l_Nodes[i ++] = (Node)l_Objects.nextElement();
   
  return l_Nodes;  
}

Reply

Marsh Posté le 21-12-2001 à 10:39:13   

Reply

Marsh Posté le 21-12-2001 à 13:37:36    

je dirai encore plus : ca sert à quoi de poser la question "aux pros de Java" alors que c'est un problème de base et qu'on voit au 1er coup d'oeil que tu n'y connais quasiment rien en Java ??

Reply

Marsh Posté le 21-12-2001 à 13:58:11    

benou a écrit a écrit :

je dirai encore plus : ca sert à quoi de poser la question "aux pros de Java" alors que c'est un problème de base et qu'on voit au 1er coup d'oeil que tu n'y connais quasiment rien en Java ??  




 
ttttt  :non:  
Ne sois pas si agressif, veux tu! :D


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 21-12-2001 à 14:02:50    

ouais mais bon quand même ... faut pas pousser non plus ...

Reply

Marsh Posté le 21-12-2001 à 14:04:33    

mais bon, je suis ennervé aujourd'hui ... ca m'apprendra a pas dormir ...

Reply

Marsh Posté le 21-12-2001 à 14:05:17    

benou a écrit a écrit :

ouais mais bon quand même ... faut pas pousser non plus ...  




Le topic qui est censé attiré tout le monde hein :D
Je vois ce que tu veux dire. Ca m'énerve aussi ce genre d'approches.


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 21-12-2001 à 14:07:00    

ouais c'est exactement ca ! :O

Reply

Sujets relatifs:

Leave a Replay

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