Java의 Class.getName()
과 Class.getCanonicalName()
의 차이점은 무엇입니까?이름과 정식 이름의 차이점은 무엇입니까?
13
A
답변
17
다음 프로그램을 고려 :
package org.test.stackoverflow;
public class CanonicalName {
public static void main(String[] args) {
CanonicalName cn = new CanonicalName();
cn.printClassNames();
}
private Anonymous anony;
private MyAnony myAnony;
public CanonicalName() {
anony = new Anonymous() {
public void printInterface() {
System.out.println("Anony Name: " + getClass().getName());
System.out.println("Anony CanonicalName: " + getClass().getCanonicalName());
}
};
myAnony = new MyAnony();
}
public void printClassNames() {
System.out.println("CanonicalName, Name: " + getClass().getName());
System.out.println("CanonicalName, CanonicalName: " + getClass().getCanonicalName());
anony.printInterface();
myAnony.printInterface();
}
private static interface Anonymous {
public void printInterface();
}
private static class MyAnony implements Anonymous {
public void printInterface() {
System.out.println("MyAnony Name: " + getClass().getName());
System.out.println("MyAnony CanonicalName: " + getClass().getCanonicalName());
}
}
}
출력 :
CanonicalName, Name: org.test.stackoverflow.CanonicalName
CanonicalName, CanonicalName: org.test.stackoverflow.CanonicalName
Anony Name: org.test.stackoverflow.CanonicalName$1
Anony CanonicalName: null
MyAnony Name: org.test.stackoverflow.CanonicalName$MyAnony
MyAnony CanonicalName: org.test.stackoverflow.CanonicalName.MyAnony
은 그래서 기본 클래스를 위해, 그들은 같은 일을 반환 것으로 보인다. 내부 클래스의 경우 getName()
은 $
명명 규칙 (즉, .class 파일에 사용되는 이름)을 사용하고 getCanonicalName()
은 클래스를 인스턴스화하려는 경우 사용하려는 값을 반환합니다. 익명 클래스 (little-a)로는 그렇게 할 수 없으므로 getCanonicalName()
이 null을 반환합니다.
또한, http://stackoverflow.com/questions/15202997/what-is-the-difference-between-canonical-name-simple-name-and-class-name-in-jav – Anush
@Anush 재미보기 I 그것을 보았을 때 그 것을 보지 못했습니다. 그것은 내 것보다 한 달 더 오래되었습니다. 감사합니다. – durron597