Dans une méthode non statique il est possible de faire un
this.getClass().getName();
lorsque je suis dans une méthode statique, que puis-je faire ?
Dans une méthode non statique il est possible de faire un
this.getClass().getName();
lorsque je suis dans une méthode statique, que puis-je faire ?
MyClass.class.getName()
MyClass.class.getName() ne marche pas de façon générique, car tu dois connaitre le nom de la classe courante, ce qui est un peu stupide entre nous sois dit: tu connais le nom de la classe et tu applique une méthode pour connaitre le nom de la classe ???![]()
Sinon pour info:
dans this.getClass().getName(); le this est inutile car ghetClass() s'applique forcémment à l'instance en cours !!! Il ne faut pas employer this à toutes les sauces, seuls dans trois cas (je crois) sont utilisation est indispensable.
oui mais dans une méthode statique que je mette le this ou non
je ne pourrai pas executer le getClass() puisque c'est une méthode non statique !! donc le contexte n'est pas bon.
Je te parle pas de ta méthode statique, c'était une remarque d'ordre général...
A mon avis la seule soltuion pour faire ça de façon générique, c'est de passer StackTraceElement et d'utiliser Throwable.getStackTrace();
http://java.sun.com/j2se/1.4.2/docs/...Throwable.html
http://java.sun.com/j2se/1.4.2/docs/...ceElement.html
Ce qui es à mon avis ultra couteux...
A moitié stupide, alors. Ca peut toujours être utile en cas de refactorisation.Envoyé par thibaut
C'est d'accord, à moitié stupide...
parceque c'est ce que j'ai fait pour une de mes factory...
Mais il y avait une raison précise: je ne voulais pas avoir des ClassNotFoundException, or en mettant le nom de la classe dans une chaîne de caratère ou dans un .properties, si je déplace la classe (et c'est fort probable, car mon projet est en cours de développement) WSAD met à jour les importations correctement mais les .properties ou les String seraient inchangées, donc source d'erreurs...
ok, pas de solution élégante.
C pas grave, je vais mettre le nom de la classe en hard.
merci
http://www.rgagnon.com/javadetails/java-0402.html
Le tableau retourné par getClassContext() contient la liste des classes (ainsi, pour accéder à la classe fille directe : getClassContext()[2].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class ClassFromStatic { public static void main(java.lang.String[] args) { someStaticMethod(); } public static void someStaticMethod() { System.out.println ("I'm in " + new CurrentClassGetter().getClassName() + " class"); } public static class CurrentClassGetter extends SecurityManager { public String getClassName() { return getClassContext()[1].getName(); } } }
Partager