Type objet - Java - Programmation
Marsh Posté le 26-12-2004 à 15:50:43
if (myObject instanceof Carre)
...
ou encore
myObject.getClass() à comparer à Carre.class()
Marsh Posté le 26-12-2004 à 21:33:52
sircam a écrit : if (myObject instanceof Carre) |
tu veux une fessée ?
Marsh Posté le 27-12-2004 à 11:33:12
ReplyMarsh Posté le 27-12-2004 à 11:43:09
<nraynaud style="resumed">
instanceof c'est mal.
design patern visitor rulez
bande de nazes
</nraynaud>
Marsh Posté le 27-12-2004 à 11:44:14
maximew a écrit : ??? |
Je vote la suppression de instanceof de java pour que les gens apprennent la programmation correctement
Marsh Posté le 27-12-2004 à 12:18:13
benou a écrit : <nraynaud style="resumed"> |
Si vous avez le temps de nous mettre un petit exemple concret de ce DP pour le cas sus-cité...
Marsh Posté le 27-12-2004 à 13:11:05
Bande d'extrémistes
Qu'est-ce qui vous dit que les conditions d'applicabilité du pattern sont rencontrées ?
Je ne devrais pas me limiter à répondre à la question "Existe t-il une fonction qui pourrait comparer les types, afin de résoudre mon problème?", mais faut pas non plus pousser.
Marsh Posté le 27-12-2004 à 13:17:07
sircam a écrit : |
Qu'es-ce qui te dit qu'elles ne le sont pas ?
Marsh Posté le 27-12-2004 à 13:21:25
Je n'en sais rien, et c'est pour ça que je m'abstiens de crier aux nazes et de proférer des aphorismes à l'emporte-pièce
Marsh Posté le 27-12-2004 à 13:22:00
je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze
Marsh Posté le 27-12-2004 à 13:29:01
Ah tiens instanceof c'est mal ? M'en était jamais servi mais jme servais de getClass(), et jcrois que c'est mal aussi non ?
Y a quoi d'autre alors ?
Marsh Posté le 27-12-2004 à 13:32:11
the real moins moins a écrit : je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze |
Toi, n'en rajoute pas !
Marsh Posté le 27-12-2004 à 13:35:31
the real moins moins a écrit : je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze |
spamoi c'est nraynaud
Marsh Posté le 27-12-2004 à 13:42:22
Glod 2 a écrit : Ah tiens instanceof c'est mal ? M'en était jamais servi mais jme servais de getClass(), et jcrois que c'est mal aussi non ? |
Beh, y'a "Visitor pattern rulez, instanceof suckz", you know man
Sérieusement, je ne serais pas aussi catégorique. Si tu te retrouves, un peu partout, à mélanger des instanceof ou des getClass() avec du code dont ça ne devrait pas être le soucis, alors il est conseillé de visiter le pattern mentionné.
Par contre, si les conditions d'applicabilité du pattern ne sont pas remplies, ou que les méthodes ici décriées ne sont utilisées qu'avec parcimonie et de manière ponctuelle et séparée du reste, et que tu sais ce que tu fais, alors je ne vois pas d'obstable à les employer.
Marsh Posté le 27-12-2004 à 13:44:34
sircam a écrit : et que tu sais ce que tu fais |
On écrit pas du code pour soi, mais pour celui qui va le maintenir
Marsh Posté le 27-12-2004 à 13:44:41
Bah ça m'est arrivé qu'une ou 2 fois, et c'était quand jfaisais mon projet qui construisait une base de donnée à partir d'un objet donc j'étais obligé d'introspecter et de getClasser
ok
Marsh Posté le 27-12-2004 à 13:52:23
kadreg a écrit : On écrit pas du code pour soi, mais pour celui qui va le maintenir |
Par "tu sais ce que tu fais", j'entends que tu as une maitrise suffisante pour faire ce choix en connaissance de cause. Choix qui, dans le cas d'espèce, te semble a priori adapté.
Fatalement, il sera compréhensible à celui qui fera la maintenance, car une utilisation raisonnée de instanceof / getClass() ne nuira pas à la compréhension.
Il reste toujours les commentaires, que tu peux taper en abondance pour justifier et expliquer une implémentation particulière.
Marsh Posté le 27-12-2004 à 13:53:56
krosso a écrit : Si vous avez le temps de nous mettre un petit exemple concret de ce DP pour le cas sus-cité... |
je dis pas que c'est adapté à ce cas, mais ca donnerait en gros ca.
modifs à faire sur les objets existants :
Code :
|
utilisation :
Code :
|
Le DP Visiteur est un peu lourd à mettre en place, et faut aire un effort pour s'y faire au début, mais dès qu'on est amené à souvent différencier le traitement en fonction du type de l'objet, il se révèle vite efficace !
Marsh Posté le 27-12-2004 à 13:55:31
kadreg a écrit : On écrit pas du code pour soi, mais pour celui qui va le maintenir |
justement, pour peu que le gars connaisse pas ce DP, il va en chier pour comprendre !!
Marsh Posté le 27-12-2004 à 13:56:36
Honnetement, je crois que même pour la personne qui maintient le code, un petit instanceof ne gène pas du tout à la compréhension.
Le code et la technique sont une chose, le principe et le concept en sont une autre. Et pour ce qui est de la maintenance, c'est surtout la 2eme qui importe...
Marsh Posté le 27-12-2004 à 13:58:12
maximew a écrit : Honnetement, je crois que même pour la personne qui maintient le code, un petit instanceof ne gène pas du tout à la compréhension. |
Généralement, le instanceof va poser problème bien plus tard, puisqu'on a une instance qui va suivre un chemin non prévu, et pas être traité.
Marsh Posté le 27-12-2004 à 14:07:24
benou a écrit : justement, pour peu que le gars connaisse pas ce DP, il va en chier pour comprendre !! |
Oui, enfin dans ce cas, ca n'excuse pas! Un analyste programmeur se doit d'à peu près tous les connaitre!
Marsh Posté le 27-12-2004 à 14:09:24
mouahahah. si y'en a un sur 10 qui en a ne serait-ce qu'entendu parler, ca serait déja pas mal
Marsh Posté le 27-12-2004 à 14:13:15
benou a écrit : spamoi c'est nraynaud |
pas du tout
Marsh Posté le 27-12-2004 à 15:47:06
tout le monde s'en fout de mon exemple de Visiteur avec du jdk1.5 dedans
the real moins moins a écrit : pas du tout |
et c'est moi qui suis 1er degrès
Marsh Posté le 27-12-2004 à 16:32:12
ha, on peut insulter les autres gratuitement maintenant?
Marsh Posté le 27-12-2004 à 16:33:36
the real moins moins a écrit : ha, on peut insulter les autres gratuitement maintenant? |
nan, faut payer, mais comme c'est moi qui récolte les sous ...
Marsh Posté le 27-12-2004 à 17:10:41
benou a écrit : tout le monde s'en fout de mon exemple de Visiteur avec du jdk1.5 dedans |
on a rien compris jcrois
Marsh Posté le 27-12-2004 à 17:17:22
Glod 2 a écrit : on a rien compris jcrois |
en gros :
* Un visiteur c'est un objet qui saura faire un certain traitement pour un certain nombre de types d'objets. (cf interface du visiteur)
* chacun de ces types d'objets doit être prévu pour être visité par ce visiteur (méthode visiting de chaque objet qui appelle la bonne méthode du visiteur)
* l'utilisation du DP visiteur consite à créer un Visiteur qui représente le traitement à effectuer pour chaque type d'objet, et à visiter le ou les objets concerné avec ce visiteur.
ca permet de faire un traitement spécifique en fonction du type de l'objet sans jamais avoir à tester le type de l'objet ...
edit : dans l'exemple j'ai créé un adapteur, mais c'est pas indispensable ...
Marsh Posté le 27-12-2004 à 18:07:18
benou a écrit : je dis pas que c'est adapté à ce cas, mais ca donnerait en gros ca.
|
tu fumes ?
joquetino> tu vas en faire quoi de ta liste de carrés ?
Marsh Posté le 27-12-2004 à 18:39:52
ReplyMarsh Posté le 27-12-2004 à 21:30:50
Je vois que mon pb déchaîne les passions .....
nraynaud>> la liste de carrés étais un exemple pour présenter mon problème, qui s'est résolu grâce à votre aide.
Par contre, un nouveau est apparu :
J'ai une JTable dans lequel j'ai insérer des éléments.
Les éléments en question sont des Integer.
table est ma JTable.
Integer p=(Integer) table.getModel().getValueAt(j,2);
System.out.println(p);
Or il me met : java.lang.ClassCastException
Pourquoi je ne peux faire ce cast?
Marsh Posté le 28-12-2004 à 00:57:27
Je viens de m'aperçveoir de quelque chose.
Cela me met une erreur que lorsque j'édite ma JTable.
Y a t-il quelque chose de particulier à déclarer dans ce cas?
Marsh Posté le 28-12-2004 à 01:19:30
Bizarrement en faisant,
Object p=res2.getModel().getValueAt(j,2);
System.out.println(p);
Il m'affiche bien un nombre dans la console.
Mais moi j'ai besoin de cette valeur pour l'enregistrer.
J'ai essayé de caster de cette façon,
Integer po=(Integer) p;
Mais ça ne fonctionne tjrs pas.
Marsh Posté le 28-12-2004 à 01:20:20
100 balles que c'est un String
Marsh Posté le 28-12-2004 à 01:37:17
Reply
Marsh Posté le 26-12-2004 à 15:47:30
Bonjour à tous,
J'ai un p'tit souci pour comparer le type d'objets. Je m'explique. J'ai un
type Forme. Deux autres types, carre et rectangle, héritent de Forme.
J'ai une liste de type Forme.
Or, j'aimerai à partir de celle liste en construire une nouvelle, qui ne contient que les éléments de type carre.
Existe t-il une fonction qui pourrait comparer les types, afin de résoudre mon problème?
Merci d'avance.