2013-04-09 5 views
13

Java의 Class.getName()Class.getCanonicalName()의 차이점은 무엇입니까?이름과 정식 이름의 차이점은 무엇입니까?

+1

또한, http://stackoverflow.com/questions/15202997/what-is-the-difference-between-canonical-name-simple-name-and-class-name-in-jav – Anush

+0

@Anush 재미보기 I 그것을 보았을 때 그 것을 보지 못했습니다. 그것은 내 것보다 한 달 더 오래되었습니다. 감사합니다. – durron597

답변

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을 반환합니다.

+1

몇 초 내에 질문에 대한 답을 찾을 수 없습니다. 속임수 같아. 질문과 대답은 정확히 같습니다. –

+9

@MaciejZiarko 하단에 체크 박스가 있습니다. "자신 만의 질문, Q & A 스타일에 대답합니다. 내가 어디에서 찾을 수 없기 때문에 SO에있는 지식 기반에 최근 발견 한 것을 추가하고 싶습니다. – durron597

+0

나중에 참조 할 수 있도록 이름을 지정하지 마십시오. 당신이 탐험하려는/묘사하고있는 바로 그 개념 이후의 수업 ... – Andrew