Java - ottenere il nome della classe corrente?

Tutto quello che sto cercando di fare è ottenere il nome della classe corrente, e java aggiunge un inutile $1 senza senso alla fine del mio nome di classe. Come posso sbarazzarmene e restituire solo il nome effettivo della classe?

String className = this.getClass().getName();
Soluzione

Il "$1" non è "inutile non-senso". Se la vostra classe è anonima, viene aggiunto un numero.

Se non volete la classe stessa, ma la sua classe dichiarante, allora potete usare getEnclosingClass(). Per esempio:

Class<?> enclosingClass = getClass().getEnclosingClass();
if (enclosingClass != null) {
  System.out.println(enclosingClass.getName());
} else {
  System.out.println(getClass().getName());
}

Potete spostarlo in qualche metodo statico di utilità.

Ma nota che questo non è il nome della classe corrente. La classe anonima è una classe diversa da quella che la racchiude. Il caso è simile per le classi interne.

Commentari (1)

Provate ad usare questo this.getClass().getCanonicalName() o this.getClass().getSimpleName(). Se si tratta di una classe anonima, usate this.getClass().getSuperclass().getName().

Commentari (7)

Nel tuo esempio, this si riferisce probabilmente a un'istanza di classe anonima. Java dà un nome a queste classi aggiungendo un $numero al nome della classe che le racchiude.

Commentari (1)