{Heritage} Je comprends pas...

{Heritage} Je comprends pas... - Java - Programmation

Marsh Posté le 24-11-2003 à 16:49:17    

Voila j'ai fait un truc qui me semmble tout con mais le compilateur veut rien savoir
 
Mon but est de faire un objet FileNode qui etend File et dont la methode tosstring renvoie le nom du fichier et non pas son chemin complet comme le fait la methode tostring de File.
 
j'ai defini cette classe qui herite de File donc rien d'extraordinaire :
 

Code :
  1. import java.io.*;
  2.     public class FileNode extends File
  3.    {
  4.        public FileNode(String pathname)
  5.       {
  6.          super(pathname);
  7.       }
  8.  
  9.        public String toString()
  10.       {
  11.          return this.getName();
  12.       }
  13.    }


 
Ensuite je veux l'utiliser :

Code :
  1. public FileNode[] roots;


 

Code :
  1. roots = (FileNode[])File.listRoots();


 
et la il me met une ClassCastException
 
Comment pallier ce probleme? est ce que ca vient du fait que listRoots est static ? on ne pourrait donc l'appliquer que sur File ?
 
Merci de votre aide :)
 
Edit : pardon pour les crochets  :)


Message édité par spitagor le 24-11-2003 à 17:21:12
Reply

Marsh Posté le 24-11-2003 à 16:49:17   

Reply

Marsh Posté le 24-11-2003 à 17:07:23    

Ben, listRoots te rend un tableau de File, pas un tableau de FileNode. Et puis, j'pense pas que tu puisses caster tous les élements d'un tableau comme une grosse brute, comme ça. Faudrait au moins énumérer les élements du tableau, et les caster un par un. Bref, de toute façon, tu peux pas caster un File en FileNode. Le contraire, oui. Par contre tu peux te faire une méthode de convertion par exemple, qui te rend un FileNode à partir d'un FileNode, ou alors créer une classe FileNodeFactory, chargée de construire des instances de FileNode, à partie d'instances de File.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 24-11-2003 à 17:14:54    

mouais.... c'est bien chiant tout ca...
c pourtant un truc tout con que je veux faire ! juste redefinir une methode!
 
 
Tant qu'a faire autant encapsuler un fichier ce serait plus simple? Et je redefinis les methodes dont j'ai besoin...
 
Style :  
 

Code :
  1. public class FileNode
  2.    {
  3.       private File fichier;
  4.  
  5.        public String toString()
  6.       {
  7.          return this.fichier.getName();
  8.       }
  9.  
  10.        public File getFichier()
  11.       {
  12.          return this.fichier;
  13.       }
  14.      
  15.        public File[] listFiles()
  16.       {
  17.          return this.fichier.listFiles();
  18.       }
  19.        public boolean isDirectory()
  20.       {
  21.          return this.fichier.isDirectory();
  22.       }
  23.  
  24.  
  25.    }


 
trop bourrin?  :??:

Reply

Marsh Posté le 24-11-2003 à 17:16:41    

les [ ] dans les titres c'est pas bien [:benou] (ça cache le nom de la sous-catégorie)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-11-2003 à 17:26:48    

spitagor a écrit :

mouais.... c'est bien chiant tout ca...
c pourtant un truc tout con que je veux faire ! juste redefinir une methode!


ouais mais le problème c'est que t'as pas saisi le principe de l'héritage en java je pense ...
 
et non, ta 2e méthode n'est pas trop bourrin mais elle ne règle pas le problème : c'est toujours un tableau de File que tu tetourne et pas un tableau de FileNode


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-11-2003 à 17:40:03    

en fait c juste que j'ai voulu faire de la compatibilité ascendante.... bon je vais faire une fonction de conversion alors... t vraiment sur qu'il n'y a pas d'autre moyen? Je trouve ca un peu lourd au vu de ce que je veux faire mais bon...

Reply

Marsh Posté le 24-11-2003 à 17:43:34    

pkoi tu ferais pas une NodeFile qui hérite de File et qui surcharge les méthodes list() pour retourner des tableaux de NodeFile plutot que de File ?


Message édité par benou le 24-11-2003 à 17:44:30

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-11-2003 à 17:47:36    

ben oui c mon but effectivement ..

Reply

Marsh Posté le 24-11-2003 à 17:54:04    

mais ca ne ferait pas que deplacer le probleme?  
 
 

Code :
  1. public FileNode[] listFiles()
  2.       {
  3.          return ???;
  4.       }


 
 
tu parlais de quelle methode list? celle sui renvoie une String? ou listFiles?

Reply

Marsh Posté le 24-11-2003 à 18:12:03    

spitagor a écrit :

mais ca ne ferait pas que deplacer le probleme?  


oui, le code sera le même mais il sera fait à l'intérieur de FileNode, ce qui est bien plus logique puisque c'est sa fonction.
 

spitagor a écrit :

tu parlais de quelle methode list? celle sui renvoie une String? ou listFiles?


si j'ai bien compris, ton FileNode redéfinit la méthode toString(), donc à mon avis il faudra que tu redéfinisses les 2 types de méthode


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-11-2003 à 18:12:03   

Reply

Marsh Posté le 24-11-2003 à 18:28:12    

ok...
 
et sinon pour la fonction de conversion
 
je dois convertir un File en FileNode
 

Code :
  1. public FileNode toFileNode()
  2. return ??? j'ai trop du mal la...comment je fais pour convertir un File en FileNode... ce qui differe c'est juste une methode!

Reply

Marsh Posté le 24-11-2003 à 18:31:54    

:/
 
ben FileNode c'est ta classe, tu devrais le savoir ! [:w3c compliant]
 
d'après le code quetu as filé plus haut, ce serait new FileNode(leFile.toString()).


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

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