내가하려고하는 것은 현재 클래스 이름을 얻는 것 뿐이며 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
실제로로 묶인 경우 B
B 클래스는 쉽게 다음과 같이 알 수 있습니다.
B.this.getClass().getName()
답변
귀하의 예에서 this
아마도 익명 클래스 인스턴스를 가리킬 것입니다. Java는 $number
둘러싸는 클래스의 이름에 a 를 추가하여 해당 클래스에 이름을 제공합니다 .