368 Stimmen

Java - den aktuellen Klassennamen erhalten?

Alles, was ich zu tun versuche, ist, den aktuellen Klassennamen zu erhalten, und Java fügt einen nutzlosen Unsinn an $1 an das Ende meines Klassennamens. Wie kann ich es loswerden und nur den tatsächlichen Klassennamen zurückgeben?

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

344voto

jesg Punkte 3065

Versuchen Sie es,

String className = this.getClass().getSimpleName();

Dies funktioniert, solange Sie es nicht in einer statischen Methode verwenden.

293voto

Bozho Punkte 570413

Die "1 $" sind kein "nutzloser Unsinn". Wenn Ihre Klasse anonym ist, wird eine Zahl angehängt.

Wenn Sie nicht die Klasse selbst, sondern ihre deklarierende Klasse wollen, können Sie getEnclosingClass() . Zum Beispiel:

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

Sie können das in eine statische Dienstprogrammmethode verschieben.

Beachten Sie jedoch, dass dies nicht der aktuelle Klassenname ist. Die anonyme Klasse ist eine andere Klasse als die sie umschließende Klasse. Ähnlich verhält es sich bei inneren Klassen.

35voto

MirroredFate Punkte 11586

Versuchen Sie es mit dieser this.getClass().getCanonicalName() o this.getClass().getSimpleName() . Wenn es eine anonyme Klasse ist, verwenden Sie this.getClass().getSuperclass().getName()

16voto

Karuna Punkte 679

Sie können verwenden this.getClass().getSimpleName() , etwa so:

import java.lang.reflect.Field;

public class Test {

    int x;
    int y;  

    public String getClassName() {

        String className = this.getClass().getSimpleName(); 
        System.out.println("Name:" + className);
        return className;
    }

    public Field[] getAttributes() {

        Field[] attributes = this.getClass().getDeclaredFields();   
        for(int i = 0; i < attributes.length; i++) {
            System.out.println("Declared Fields" + attributes[i]);    
        }

        return attributes;
    }

    public static void main(String args[]) {

        Test t = new Test();
        t.getClassName();
        t.getAttributes();
    }
}

4voto

SoftDesigner Punkte 5376

Die Kombination aus beiden Antworten. Gibt auch einen Methodennamen aus:

Class thisClass = new Object(){}.getClass();
String className = thisClass.getEnclosingClass().getSimpleName();
String methodName = thisClass.getEnclosingMethod().getName();
Log.d("app", className + ":" + methodName);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X