Nom de classe appelante

cs_mimou01 Messages postés 29 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2007 - 13 avril 2007 à 09:45
Fifan Messages postés 26 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 10 mai 2007 - 13 avril 2007 à 14:18
Salut,


Supposons que j'ai cet appel classe1.METH() , ya t'il un moyen pour reconneaitre au sein de la méthode méthode le nom de la classe qui a fait l'appel c'est a dire classe1.
Merci

9 réponses

cs_mimou01 Messages postés 29 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2007
13 avril 2007 à 10:35
Je m'excuse là je veux dire au sein de la méthode METH() pourrais je savoir le nom de la classe qui a fait l'appel c'est à dire classe1.


Mon problème est que j'ai plusieurs classes qui appellent la méthode statique METH() et que le traitement différe d'un classe appelante à une autre, donc si je connaitrais le nom de la classe qui a fait l'appel je n'aurais pas besoin de faire plusieurs implémentation de la méthode METH(), je différencirai le traitement selon la classe appelante.


C'est urgent


Merci
0
Fifan Messages postés 26 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 10 mai 2007
13 avril 2007 à 10:38
En général un tel besoin (savoir par qui on est appelé) dénote d'un pb de conception...
Sinon, tu peux essayer ce code là dans METH:
String callerClass = new Exception().getStackTrace()[1].getClassName().toString();
String callerMethod = new Exception().getStackTrace()[1].getMethodName().toString();

En espérant que cela t'aide
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
13 avril 2007 à 10:49
tout à fait d'accord avec Fifan : si tu es obligé de savoir qui appelle la méthode pour faire un traitement, oublie la programmation objet ;)
Crée une dépendance entre une classe et toutes les instances de classe
qui peuvent l'utiliser, cela va à l'encontre de la programmation objet !

Pourquoi ne passe-tu pas un objet à ta méthode METH qui ferait le traitement spécifique que tu as besoin ?

D'ailleurs, quel est l'intérêt d'avoir une méthode qui ferait un traitement particulier selon la classe appelante ? A moins d'avoir un petit traitement qui est spécifique, et ainsi eviter de la duplication de code, je n'en voit pas l'intérêt.
0
cs_mimou01 Messages postés 29 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 15 mai 2007
13 avril 2007 à 10:53
En fait, je dois mieux m'exprimer, j'ai trois niveaux de classes, une classe Ancestor de laquelle herite ma classe1, et dans laquelle est implémenté ma methode statique  METH(), et plusieurs classes qui en heritent classe1, classe2, classe3. 
Le traitement differe de classe1 à classe 2 a classe 3, je ne veux pas reimplementer ma methode METH() au sein de chacune de ces classes parce qu'il n'ya qu'un seul parametre qui change donc c'est inutile de le faire,
L'appel classe1.METH() ou classe2().METH() se fait dans une autre classe d'execution .
Ma question est donc est ce qu'il ya un moyen qui me permettra de reconnaitre la classe qui a fait l'appel (classe1 ou classe2 ou ........)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
13 avril 2007 à 11:01
Yop yop !!

c est clair que y a un pb de conception la !!
si ta méthode est statique c est qu elle fait la meme chose pour tout le monde !!
Si c est pas le cas dans ce cas tu vire statique et vu que t hérite tu surcharge ta méthode METH comme ca par polymorphisme ca passera comme tu veux.
Sinon question toute bete, si tu dois faire on va dire 3 traitements spécifiques suivant qui appelle la méthode, pourquoi tu fais pas tout betement 3 méthodes et celui qui appelle, qui sait ce qu il fait appelera la méthode qui l interesse !!
++ Toinou
0
zieunoir Messages postés 14 Date d'inscription lundi 2 avril 2007 Statut Membre Dernière intervention 27 avril 2007
13 avril 2007 à 11:35
essaye ça :
dans ta methode
this

.getClass().getName();
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
13 avril 2007 à 12:31
>> zieunoir : c'est la solution que j'avais proposé hier, mais qui ne marche pas pour une méthode statique.

100% d'accord avec super_toinou : le polymorphisme ou la redéfinition me semble être LA solution dans ce cas là. Aucune raison de mettre en static une méthode si son comportement est différent selon l'appelant !

Il faut absolument casser la dépendance entre classe dans la programmation objet, sinon on s'en sort plus !
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 avril 2007 à 12:37
Salut:

Si tu fais MyClass.method () alors tu es sûr que:
cette méthode est statique
la classe appelante est la classe qui la classe de base qui contient cette méthode ou une classe fille (sans parler du surdéfinition).


________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
0
Fifan Messages postés 26 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 10 mai 2007
13 avril 2007 à 14:18
Tu peux aussi jetter un coup d'oeuil sur les design pattern état et strategy si tu rend ta méthode publique.
Mais je redis qu'une méthode (d'autant plus si elle est statique) n'a pas à savoir par qui elle est appelée. Essaies de revoir un peu ta conception et si tu veux de l'aide, il faut nous en dire en peu plus.
0
Rejoignez-nous