2012-03-09 12 views
46

मुझे आश्चर्य है कि स्काला में किसी ऑब्जेक्ट प्रकार के लिए क्लास ऑब्जेक्ट कैसे प्राप्त करें। ठीक है, यह ऑब्जेक्ट के लिए डबल अर्थ की वजह से मुंह भरा है। तो यहाँ एक उदाहरण है जो असफल हो जायेगी:स्केल ऑब्जेक्ट प्रकार के लिए क्लासऑफ कैसे प्राप्त करें

object Main 
{ 
    private [this] val TAG = classOf [Main].getName; 
} // Main 

तो Main वर्ग था यह पूरी तरह काम करता है। कोई विचार?

उत्तर

67
scala> Main.getClass 
res1: java.lang.Class[_] = class Main$ 
+1

हां। मैं देखता हूं, अब यह सब स्पष्ट हो जाता है। 'ऑब्जेक्ट का बिल्कुल एक उदाहरण है और इसलिए आप' getClass' को कॉल करते हैं। धन्यवाद। – Martin

+4

@ मार्टिन असल में, मैं कहूंगा कि यह गलत है। 'ऑब्जेक्ट का बिल्कुल _have_ उदाहरण नहीं है, क्योंकि वे प्रकार नहीं हैं; वे _are_ (संकलक-जेनरेट) कक्षाओं के एकमात्र उदाहरण हैं, और यही कारण है कि आप 'getClass' को कॉल कर सकते हैं। –

+3

क्या यह एक संकलन समय के रूप में ऐसा करने का एक तरीका है ताकि इसे टाइप क्लास के जावा एनोटेशन एट्रिब्यूट के लिए इस्तेमाल किया जा सके? –

6

चूंकि मुख्य एक वस्तु है, आपके उदाहरण के लिए, बस अपनी असाइनमेंट लाइन को प्रतिस्थापित करें;

private [this] val TAG = this.getClass.getName; 
14

कारण है कि classOf[Main] काम नहीं करता क्योंकि Main एक प्रकार नहीं है।

कक्षाएं और लक्षण प्रकार परिभाषित करते हैं, वस्तुएं नहीं होती हैं।

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