यह पहला साधारण कलाकार है। यह आवश्यक है कि कास्ट करने के लिए प्रकार संकलित समय पर जाना जाता है। यह संकलन समय पर सत्यापित करता है कि सही हो सकता है, और चेक (यदि कास्ट करने के लिए प्रकार सामान्य नहीं है) कि रनटाइम पर सही है।
दूसरा प्रतिबिंब एपीआई का उपयोग करता है। यह आवश्यक है कि कक्षा को कास्ट करने के लिए रनटाइम पर जाना जाता है। यह संकलन समय पर कुछ भी सत्यापित नहीं करता है, लेकिन हमेशा जांचता है कि कास्ट रनटाइम पर सही है।
टाइप पैरामीटर केवल संकलन प्रकार पर ज्ञात हैं, इसलिए आप एक प्रकार पैरामीटर के लिए दूसरे दृष्टिकोण का उपयोग नहीं कर सकते (अभिव्यक्ति T.class
संकलित नहीं है)।
गतिशील रूप से लोड किए गए वर्ग (उदाहरण के लिए क्लास.forनाम (स्ट्रिंग) के साथ) केवल रनटाइम पर ज्ञात हैं, इसलिए पहला दृष्टिकोण उपयोग नहीं किया जा सकता है।
संपादित करें: हालांकि, जैसा कि पावेल बताता है, यह गतिशील रूप से लोड कक्षा में डालने का कोई मतलब नहीं है। मैं मानता हूं कि Class.cast(Object)
की एकमात्र असली उपयोगिता एक प्रकार पैरामीटर को डालने के लिए है जिसके लिए आपको क्लास ऑब्जेक्ट उपलब्ध है।
यदि टाइप करने के प्रकार में टाइप पैरामीटर नहीं होता है, तो पहला दृष्टिकोण बेहतर होता है, क्योंकि अतिरिक्त संकलन समय की जांच बग को पकड़ सकती है, आप रनटाइम पर कोई प्रकार की सुरक्षा नहीं खोते हैं, और बूट करने के लिए एक छोटा वाक्यविन्यास प्राप्त करते हैं।
ठीक है, तो मैं बस एहसास हुआ कि आप एक आदिम प्रकार के आवरण को कास्ट करने के लिए 'cast' उपयोग कर सकते हैं। जैसे 'इंटीजर i = int.class.cast ("1234"); ' –
@ सिंबंबॉट: आप इसे _write_ कर सकते हैं, लेकिन यह ऐसा नहीं करेगा जो आपको लगता है कि यह संभवतः करता है। कोशिश करो। –
यह क्लासकास्ट अपवाद फेंक देगा, क्योंकि स्ट्रिंग प्रकार इंटीजर नहीं है। उस मामले में आपको 'Integer.valueOf (" 1234 ") की आवश्यकता होगी। –