Todo lo que estoy tratando de hacer es obtener el nombre de la clase actual, y Java agrega $ 1 sin sentido inútil al final del nombre de mi clase. ¿Cómo puedo deshacerme de él y solo devolver el nombre real de la clase?
String className = this.getClass().getName();
String className = getClass().getName().substring(0, getClass().getName().indexOf("$"))
$1
entonces, porque el nombre de la clase es$1
. Si espera algo más, úselothis
en la clase correcta en lugar de la incorrecta.Respuestas:
El "$ 1" no es un "sin sentido inútil". Si su clase es anónima, se agrega un número.
Si no desea la clase en sí misma, sino su declaración de clase, puede usarla
getEnclosingClass()
. Por ejemplo:Puede mover eso en algún método de utilidad estática.
Pero tenga en cuenta que este no es el nombre de la clase actual. La clase anónima es una clase diferente que su clase adjunta. El caso es similar para las clases internas.
fuente
null
y usar la última nonull
clase que obtuvo?Tratar,
Esto funcionará siempre que no lo use en un método estático.
fuente
""
Intenta usar esto
this.getClass().getCanonicalName()
othis.getClass().getSimpleName()
. Si es una clase anónima, usethis.getClass().getSuperclass().getName()
fuente
Puedes usar
this.getClass().getSimpleName()
, así:fuente
La combinación de ambas respuestas. También imprime un nombre de método:
fuente
esta respuesta llega tarde, pero creo que hay otra forma de hacerlo en el contexto de la clase de controlador anónimo.
digamos:
logrará el mismo resultado. Además, en realidad es bastante conveniente ya que cada clase se define en tiempo de compilación, por lo que no se daña la dinámica.
por encima de eso, si la clase está realmente anidada, es decir, en
A
realidad está encerrada porB
, la clase de B puede ser fácilmente conocida como:fuente
En su ejemplo,
this
probablemente se refiere a una instancia de clase anónima. Java le da un nombre a esas clases agregando un$number
al nombre de la clase adjunta.fuente
Supongo que esto está sucediendo para una clase anónima. Cuando crea una clase anónima, en realidad crea una clase que extiende la clase cuyo nombre obtuvo.
La forma "más limpia" de obtener el nombre que desea es:
Si su clase es una clase interna anónima,
getSuperClass()
debería darle la clase a partir de la cual se creó. Si lo creó desde una interfaz, entonces es una especie de SOL porque lo mejor que puede hacer es logetInterfaces()
que le puede proporcionar más de una interfaz.La forma "hacky" es simplemente obtener el nombre
getClassName()
y usar una expresión regular para soltar el$1
.fuente
Aquí hay una variante de Android, pero también se puede usar el mismo principio en Java simple.
fuente
He encontrado que esto funciona para mi código, sin embargo, mi código está sacando la clase de una matriz dentro de un bucle for.
fuente
API de reflexión
fuente