[java] Java-현재 클래스 이름을 얻습니까?

내가하려고하는 것은 현재 클래스 이름을 얻는 것 뿐이며 java는 클래스 이름 끝에 쓸모없는 넌센스 $ 1 을 추가합니다 . 어떻게 제거하고 실제 클래스 이름 만 반환 할 수 있습니까?

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



답변

“$ 1″은 “무의미한 의미가 없습니다”. 수업이 익명 인 경우 숫자가 추가됩니다.

클래스 자체는 원하지 않지만 클래스를 선언하려면을 사용할 수 있습니다 getEnclosingClass(). 예를 들면 다음과 같습니다.

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

정적 유틸리티 방법으로 이동할 수 있습니다.

그러나 이것은 현재 클래스 이름이 아닙니다. 익명 클래스는 해당 클래스와 다른 클래스입니다. 내부 클래스의 경우도 마찬가지입니다.


답변

시험,

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

정적 메소드에서 사용하지 않는 한 작동합니다.


답변

this.getClass().getCanonicalName()또는을 사용해보십시오
this.getClass().getSimpleName(). 익명 클래스 인 경우this.getClass().getSuperclass().getName()


답변

당신은 다음 this.getClass().getSimpleName()과 같이 사용할 수 있습니다 :

import java.lang.reflect.Field;

public class Test {

    int x;
    int y;

    public void getClassName() {
        String className = this.getClass().getSimpleName();
        System.out.println("Name:" + className);
    }

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

    public static void main(String args[]) {

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


답변

두 답변의 조합. 또한 메소드 이름을 인쇄합니다.

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


답변

이 답변은 늦었지만 익명 처리기 클래스의 컨텍스트 에서이 작업을 수행하는 다른 방법이 있다고 생각합니다.

의 말을하자:

class A {
    void foo() {
        obj.addHandler(new Handler() {
            void bar() {
                String className=A.this.getClass().getName();
                // ...
            }
        });
    }
}

동일한 결과를 얻을 수 있습니다. 또한 모든 클래스가 컴파일 타임에 정의되므로 동적이 손상되지 않으므로 실제로 매우 편리합니다.

그보다 클래스가 실제로 중첩되어있는 경우, 즉 A실제로로 묶인 경우 BB 클래스는 쉽게 다음과 같이 알 수 있습니다.

B.this.getClass().getName()


답변

귀하의 예에서 this아마도 익명 클래스 인스턴스를 가리킬 것입니다. Java는 $number둘러싸는 클래스의 이름에 a 를 추가하여 해당 클래스에 이름을 제공합니다 .