2013-04-09 3 views
13

जावा के 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

@ अनीश मजाकिया, मैं इसे देखकर उसको नहीं देखा, जो मेरी तुलना में केवल एक महीने पुराना है। धन्यवाद – 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() रिटर्न क्या आप अगर आप वर्ग का दृष्टांत करने की कोशिश कर रहे थे का प्रयोग करेंगे, और। आप ऐसा नहीं कर सकता है एक (थोड़ा-एक) गुमनाम वर्ग के साथ है, तो यही कारण है कि getCanonicalName() रिटर्न अशक्त है।

+1

यह सिर्फ सेकंड में अपने खुद के सवाल का जवाब खोजने के लिए असंभव है। धोखे की तरह लग रहा है। प्रश्न के टाइम्स और जवाब बिल्कुल वही हैं। –

+9

@MaciejZiarko वहाँ तल पर एक चेकबॉक्स है "अपना स्वयं का प्रश्न, क्यू एंड ए शैली का जवाब। मैं इतना में ज्ञान का आधार करने के लिए मेरी हाल ही में खोज जोड़ने के लिए है, क्योंकि मैं इसे कहीं भी नहीं पा सके थे। – durron597

+0

भविष्य में संदर्भ के लिए, नाम नहीं कक्षा के अवधारणा के बाद आप एक्सप्लोर करने/चित्रित करने की कोशिश कर रहे हैं ... – Andrew

संबंधित मुद्दे