Tout ce que j'essaie de faire, c'est d'obtenir le nom de la classe actuelle, et java ajoute un $ 1 non-sens inutile à la fin de mon nom de classe. Comment puis-je m'en débarrasser et ne renvoyer que le nom de classe réel?
String className = this.getClass().getName();
String className = getClass().getName().substring(0, getClass().getName().indexOf("$"))
$1
alors, car le nom de la classe est$1
. Si vous attendez autre chose, utilisez-lethis
dans la bonne classe au lieu de la mauvaise.Réponses:
Le «$ 1» n'est pas un «non-sens inutile». Si votre classe est anonyme, un numéro est ajouté.
Si vous ne voulez pas la classe elle-même, mais sa classe déclarante, vous pouvez utiliser
getEnclosingClass()
. Par exemple:Vous pouvez déplacer cela dans une méthode utilitaire statique.
Mais notez que ce n'est pas le nom de la classe actuelle. La classe anonyme est une classe différente de sa classe englobante. Le cas est similaire pour les classes internes.
la source
null
et utiliser la dernière non-null
classe que vous avez obtenue?Essayer,
Cela fonctionnera tant que vous ne l'utiliserez pas dans une méthode statique.
la source
""
Essayez d'utiliser ceci
this.getClass().getCanonicalName()
outhis.getClass().getSimpleName()
. S'il s'agit d'une classe anonyme, utilisezthis.getClass().getSuperclass().getName()
la source
Vous pouvez utiliser
this.getClass().getSimpleName()
, comme ceci:la source
La combinaison des deux réponses. Imprime également un nom de méthode:
la source
cette réponse est en retard, mais je pense qu'il existe une autre façon de le faire dans le contexte de la classe de gestionnaire anonyme.
Disons:
il obtiendra le même résultat. de plus, c'est en fait assez pratique puisque chaque classe est définie au moment de la compilation, donc aucune dynamicité n'est endommagée.
au-dessus de cela, si la classe est vraiment imbriquée, c'est-à-dire qu'elle
A
est réellement entourée parB
, la classe de B peut être facilement connue comme:la source
Dans votre exemple,
this
fait probablement référence à une instance de classe anonyme. Java donne un nom à ces classes en ajoutant un$number
au nom de la classe englobante.la source
Je suppose que cela se produit pour une classe anonyme. Lorsque vous créez une classe anonyme, vous créez en fait une classe qui étend la classe dont vous avez obtenu le nom.
La façon la plus «propre» d'obtenir le nom que vous voulez est:
Si votre classe est une classe interne anonyme,
getSuperClass()
devrait vous donner la classe à partir de laquelle elle a été créée. Si vous l'avez créé à partir d'une interface, vous êtes en quelque sorte SOL, car le mieux que vous puissiez faire est degetInterfaces()
vous donner plus d'une interface.La méthode "hacky" consiste simplement à obtenir le nom avec
getClassName()
et à utiliser une expression régulière pour supprimer le$1
.la source
Voici une variante Android, mais le même principe peut également être utilisé en Java simple.
la source
J'ai trouvé que cela fonctionnait pour mon code, mais mon code récupère la classe d'un tableau dans une boucle for.
la source
API de réflexion
la source