OVH Cloud OVH Cloud

Mehode en cours

6 réponses
Avatar
JBB
Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode

Merci,

6 réponses

Avatar
Jean-Claude Arbaut
JBB wrote:
Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode


Je vais sûrement dire une bêtise, mais tu le sais puisque tu tapes le
code de la méthode ;-) Le seul intérêt réel est de savoir quelle
est exactement la classe, il me semble (parce que ça peut être n'importe
quel descendant).

Avatar
vc.spam
Salut,

Ce que tu cherches se trouve dans la stacktrace des exceptions...

StackTraceElement el = new Exception().getStackTrace()[0];

Après tu as el.getMethodName() & cie...

Tu peux mettre ça dans une méthode static (d'une classe utilitaire),
mais il faut penser à remonter d'un cran dans la stackTrace
(getStackTrace()[1];).

Attention, c'est gourmand en ressource, donc à n'utiliser qu'avec
discernement...

A+

Vincent







Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode

Merci,


Avatar
David
Le Fri, 16 Jun 2006 06:14:56 -0700, vc.spam a écrit :

Salut,

Ce que tu cherches se trouve dans la stacktrace des exceptions...

StackTraceElement el = new Exception().getStackTrace()[0];


Il vaut mieux passer par Throwable.

Avatar
Xavier Tarrago
Je ne sais pas faire et je ne pense pas que ça soit possible de façon
portable et documentée (c'était la mauvaise nouvelle).
Par contre, le Logger (classe java.util.logging.Logger) fait ça. Une partie
du code est accessible et ça vaut peut-etre le coup de s'y intéresser.

"JBB" a écrit dans le message de
news:4492a34c$0$13577$
Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode

Merci,


Avatar
Harald Mouchobauer
JBB a exprimé avec précision :
Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode

Merci,


http://logging.apache.org/log4j/docs/index.html

--
DM

Avatar
alexandre cartapanis
Est il possible de trouver la methode dans la quelle je me trouve ?
Pour une classe je fait MonObjet.getClass() ou MaClasse.class.
Mais pour une méthode ?
J'aimerais faire un truc du genre :


class MaClasse
{

void MaMethode()
{
System.out.println("je suis dans "
+ this.getClass().to_string
+ "."
+ this.getMethode().to_string);
}
}

-> je suis dans Maclasse.MaMethode

Merci,


Voici un code que j'ai ecrit, fortement inspiré de celui de log4j

/**
* <p>
* Infers the caller's class and method's name.
* </p>
* <p>
* Returns an array of string where the first element is the caller's
class name and the second element is the caller's method name. If the
caller cannot be determined, the strings will be null.
* </p>
* @return <code>String[]</code> - An array of (possibly null) string.
*/
private String[] inferCaller() {
String[] ret = new String[2];
ret[0] = null;
ret[1] = null;

StackTraceElement stack[] = (new Throwable()).getStackTrace();
int i = 0;
while (i < stack.length) {
StackTraceElement frame = stack[i];
String cname = frame.getClassName();
if (cname.equals(this.getClass().getName())) {
break;
}
i++;
}
while (i < stack.length) {
StackTraceElement frame = stack[i];
String cname = frame.getClassName();
if (!cname.equals(this.getClass().getName())) {
ret[0] = cname;
ret[1] = frame.getMethodName();
return ret;
}
i++;
}
return ret;
}

Il te renvoie un tableau de 2 string,le premier étant le nom de la
classe et le second le nom de la méthode.

Comme cela a déjà été dit, cette méthode lance une exception po ur faire
cela (new Throwable()).getStackTrace() ligne 5). J'ai fais un peu des
tests de performance, la perte n'est pas énorme, mais c'est sur que ce
n'est pas une méthode "légère". Essaye de ne pas t'en servir trop s ouvent...
--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email