Methode toString() générique, introspection. - Java - Programmation
Marsh Posté le 08-10-2005 à 18:47:39
En gros, des que je met
Code :
|
ca m'exlose a la figure.
Marsh Posté le 08-10-2005 à 19:01:53
Pq te casser la tête à réinventer la roue ?
Fais une recherche du côté de Jakarta Commons, ou encore du côté des plugins Eclipse.
Marsh Posté le 08-10-2005 à 19:06:43
Ouais mais c'est dans le cadre de mon tp donc a mon avis les plugin eclipse et autres c'est mort.
Marsh Posté le 08-10-2005 à 19:17:46
Chronoklazm a écrit : Ouais mais c'est dans le cadre de mon tp donc a mon avis les plugin eclipse et autres c'est mort. |
Quoi, tu dois ré-écrire un toString générique ??? C'est bien ça ?
Marsh Posté le 08-10-2005 à 19:21:46
Oui enfin pas un truc universel non-plus ..
Exercice 2 : une méthode toString générique |
Marsh Posté le 08-10-2005 à 19:30:19
Quelle idée.
Et quel est le message d'erreur ?
Marsh Posté le 08-10-2005 à 19:33:42
Bein le probleme c'est qu'il n'y en a pas. Just j'ai mon NetBeans qui se bloque pendant le build.
Marsh Posté le 08-10-2005 à 20:19:13
Chronoklazm a écrit : Bein le probleme c'est qu'il n'y en a pas. |
Merci d'avoir posté. C'est vendredi, ou quoi ?
Chronoklazm a écrit : Just j'ai mon NetBeans qui se bloque pendant le build. |
Jamais vu ça avec Eclipse ou IntelliJ. Assez déroutant. Compile en dehors, pour voir si ça passe ou pas. En essayant de conserver le même CLASSPATH et de bien pointer vers le même JDK. Assez zarbi, ton histoire.
Marsh Posté le 09-10-2005 à 15:44:20
sircam a écrit : Merci d'avoir posté. C'est vendredi, ou quoi ? |
Tu peux decoder stp.
J'ai remarqué que
Code :
|
Le tableau f est de taille 0 ... que je le recupere de getDeclaredFields() ou getFields() c'est pareil.
Marsh Posté le 09-10-2005 à 15:55:42
Et j'ai recompilé à la main ca fait toujours pareil ... un blocage sans aucun message d'erreur.
Marsh Posté le 09-10-2005 à 16:19:37
Citation : Tu peux decoder stp. |
C'était à propos de :
Citation : Bein le probleme c'est qu'il n'y en a pas. |
Passons, c'est sans importance.
Il convient d'être un peu plus rigoureux dans ce que tu dis ou fais :
1°- Tu dis que ça "explose" sur Class cl = this.getClass() pour ensuite parler de Field[] f = cl.getFields().
Si ça ne compile pas, comment peux-tu savoir que la taille de f est zéro ?
Car tu as bien dit :
Citation : Just j'ai mon NetBeans qui se bloque pendant le build. |
On parlait donc bien de compiler.
2°- Suite à quoi je te demande de compiler/exécuter tout cela en dehors de ton IDE : as-tu fait cela ???
Citation : ca fait toujours pareil |
On dirait que oui, mais alors la première partie de ton post ne correspond pas à ce qui se passe sur ton écran...
Si ça bloque à l'exécution ou à la compilation, comment peux-tu affirmer que f est de taille 0 ???
=> Tout cela manque de clarté et de rigueur !
Marsh Posté le 09-10-2005 à 16:57:21
Citation : On parlait donc bien de compiler. |
Non car dans mon premier post, que tu as certainement lu, je dis la phrase suivante :
Citation : A la compilation pas de probleme mais a l'execution j'ai tout mon IDE qui se bloque. |
Mais c'est vrai ... je manque certainement de rigueur.
Citation : Si ça bloque à l'exécution ou à la compilation, comment peux-tu affirmer que f est de taille 0 ??? |
Voila ce qui se passe :
- J'ai le code suivant dans la classe BebeteAbstraite qui est abstract bien entendu :
Code :
|
- Et j'ai aussi une classe BebeteStupide qui herite de BebeteAbstraite que je teste dans la methode main ci-dessous :
Code :
|
Je compile tout ceci sans probleme et voila ce que j'obtiens :
Citation : |
Voila j'espere avoir été un peu plus clair .
Marsh Posté le 09-10-2005 à 17:15:05
Bon la ca bloque plus mais j'ai toujours le tableau de Field qui est de taille 0 :
Code :
|
Citation : |
Marsh Posté le 09-10-2005 à 17:30:39
Hay, par défaut les variables membres d'un objet en Java elles seraient pas un petit peu private?
Je pense que tu devrais lire la description des fonctions Class.getField() et Class.getFields() qu'on peut trouver dans la javadoc
Marsh Posté le 09-10-2005 à 17:39:51
masklinn a écrit : Hay, par défaut les variables members d'un objet en Java ils seraient pas private? |
Je pense pas :
Code :
|
Ca donne :
Code :
|
Marsh Posté le 09-10-2005 à 17:42:55
Ouais sauf que là t'appelles getDeclaredFields, initialement t'appelais getFields, s'pas trop le même
Enfin bon moi je sais pas, tout ce que je peux te dire c'est que j'ai tapé et compilé:
Code :
|
Code :
|
et qu'à l'exécution de Frub j'ai:
>java Frub |
Et si je ne déclare pas les champs de ma Bestiole en public, je récupère:
>java Frub |
Marsh Posté le 09-10-2005 à 17:53:50
Citation : Bon la ca bloque plus |
Ah ouais ? Ne me dis rien : y'avais du AWT dans l'air ?
Je n'y comprends tjs rien à tes histoires compilation/exécution/build. Un exécution qui se termine par "build successful" -> bordel, c'est quoi cet IDE ?
Ce n'est toujours pas d'une grande clarté, et c'est même plutôt le bordel - tu exposes une mer de bouts de code sans liens entre eux...
De toute façon, relis la doc, c'est bien comme Masklinn l'a dit.
Marsh Posté le 09-10-2005 à 17:54:29
Citation : reflecting all the accessible public fields of the class or interface represented by this Class object. |
Marsh Posté le 09-10-2005 à 18:13:02
Ouais y avais de l'AWT
Bon ayé j'ai plus ou moins capté ... enfait dans ma classe BebeteAbstraite j'ai pas d'attributs publiques j'ai que des "locaux" (on les appelles comme ca ceux qui sont ni private ni public ?).
Ensuite BebeteStupide herite tous les attributs de BebeteAbstraite, et ces attributs herités sont bizzarement pas recuperables avec getFields() ou getDeclaredFields() ... (alors que dans mon cours j'ai noir sur blanc : getFields() : NE RENVOI QUE LES ATTRIBUTS PUBLICS, LOCAUX ET HERITES)
Bon bref j'ai trouvé une solution hackeuse (huhuh) :
Code :
|
La j'ai bien ce qu'il me faut.
Je passe simplement par la superclasse pour recuperer ces attributs ... apres pas trop envie de generaliser tout ca. (Exemple dans le cas ou la classe courante contient des attributs public qu'on recupere avec getFields() puis avec une boucle on remonte dans la hierarchie d'heritage et on recupere dans chaque superclasse ses attributs locaux, prives etc ...)
Marsh Posté le 09-10-2005 à 18:18:52
Et tu fais comment si il y a une superclasse (donc des attributs hérités) et des attributs non hérité?
Marsh Posté le 09-10-2005 à 18:20:50
masklinn a écrit : Et tu fais comment si il y a une superclasse (donc des attributs hérités) et des attributs non hérité? |
Enfin c'est cho quand meme ...
Marsh Posté le 09-10-2005 à 19:46:19
Non en fait c'est tout merdique :
Code :
|
Citation : |
En gros la methode getField() je vois pas trop a quoi elle sert ...
Marsh Posté le 09-10-2005 à 19:57:07
HOHOHO je peux meme avoir la valeur des attributs
Code :
|
Citation : |
Mais c'est formidable
Marsh Posté le 09-10-2005 à 22:14:01
Chronoklazm a écrit : En gros la methode getField() je vois pas trop a quoi elle sert ... |
À pas se faire chier avec des récursions sur les superclasses tout simplement
Marsh Posté le 08-10-2005 à 18:40:47
Salut,
Voila j'ai une classe BebeteAbstraite et une classe fille BebeteStupide, mon but est de faire une methode toString() générique dans la classe BebeteAbstraite qui affiche le nom des attributs et leur valeur, mais sans en connaître le nombre ni le type à l'avance.
A la compilation pas de probleme mais a l'execution j'ai tout mon IDE qui se bloque.
Donc je me suis dis que c'est normal car je suis dans une classe abstraite et qu'elle ne sera jamais instancié ...
J'ai remis cette methode dans la classe BebeteStupide et je l'ai viré de la classe abstraite.
Mais avec cet appel ça foire toujours et je pige pas trop pourquoi ...
Quelqu'un a t'il une idée svp ?
---------------
Scheme is a programmable programming language ! I heard it through the grapevine !