2010-07-20 19 views
5

मैं एक छोटा एंड्रॉइड एप्लिकेशन बना रहा हूं, लेकिन यह एंड्रॉइड प्रश्न की तुलना में जावा प्रश्न का अधिक है।जावा में, क्लास क्लास का संदर्भ क्या करता है?

startService(new Intent(this, MyService.class)); 

वास्तव में "MyService.class" क्षेत्र का प्रतिनिधित्व करता है जो: ट्यूटोरियल के माध्यम से देख रहे हैं वहाँ लाइनों कि तरह लग रहे हैं? क्या यह सिर्फ टेम्पलेट के लिए कक्षा का संदर्भ है?

धन्यवाद।

उत्तर

5

एंडी का जवाब निश्चित रूप से सही है, लेकिन मैं थोड़ा सा बिंदु पर विस्तार करना चाहता हूं।

.class क्लास ऑब्जेक्ट का उदाहरण प्राप्त करने के लिए एक विशेष वाक्यविन्यास है। इसका उपयोग तब किया जा सकता है जब केवल प्रकार उपलब्ध हो और संबंधित वस्तु का कोई उदाहरण न हो। इसका उपयोग किसी भी ठोस प्रकार के नाम से किया जा सकता है, जिसमें सरणी और प्राइमेटिव शामिल हैं। उदाहरण के लिए, int.class मान्य है।

क्लास ऑब्जेक्ट प्राप्त करने के लिए इस तरह (और अन्य तरीकों) पुराने Sun reflection API docs में दस्तावेज किए गए हैं।

विशेष .class वाक्यविन्यास अक्सर सामान्य कोड में "प्रकार टोकन" के रूप में बेवकूफ उपयोग में दिखाई देता है। .class के साथ प्राप्त एक वर्ग शाब्दिक को एक प्रकार टोकन कहा जाता है जब "संकलन-समय और रनटाइम प्रकार की जानकारी दोनों को संवाद करने के तरीकों के बीच पारित किया जाता है" (Joshua Bloch's Effective Java 2e, पृष्ठ 142)।

3

हां, MyService.class क्लास ऑब्जेक्ट का प्रतिनिधित्व करता है जो कक्षा MyService का प्रतिनिधित्व करता है। इरादा यह निर्धारित करने के लिए उपयोग करता है कि आप किस सेवा या गतिविधि को शुरू करना चाहते हैं।

+0

जावा के उपयोग पर क्लास सौदे के बारे में अधिक जानकारी है? मैं समझता हूं कि इसका उपयोग करने का नतीजा क्या है और ऐसा क्यों है, लेकिन जावा इस कार्यान्वयन का उपयोग क्यों करता है? नया MyService() जैसे कॉल करने के बजाय यह वाक्यविन्यास भी मौजूद क्यों है। – Falmarri

+0

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मुझे संदेह है कि एंड्रॉइड के आर्किटेक्चर के साथ स्पष्ट गतिविधि या सेवा ऑब्जेक्ट सृजन के साथ डेवलपर की बातचीत को कम करने या छिपाने की कोशिश कर रहा है। विशेष रूप से क्यों नहीं जानते, लेकिन मैं पता लगाने की कोशिश करूंगा। –

+1

यह आम तौर पर जावा जेनरिक के प्रकार-मिटा के कारण किया जाता है। कक्षा के रन-टाइम प्रकार को कैप्चर करने के लिए आप पैरामीटर प्रकार क्लास के साथ किसी विधि को क्लास पास कर सकते हैं, क्योंकि आप सुरक्षित पैरामीटर के साथ सुरक्षित रूप से अधिक नहीं कर सकते हैं। –

1

MyService.class आपको क्लास ऑब्जेक्ट को केवल क्लास नाम से, MyClass क्लास का वर्णन करने की अनुमति देता है (जैसा क्लास का उदाहरण object.getClass() के लिए पूछने के विपरीत है)।

1

जेवीएम में, जब कोई वर्ग लोड होता है, तो प्रकार Class की एक वस्तु स्मृति में लोड कक्षा का प्रतिनिधित्व करती है। com.abc.MyClass.class एक शाब्दिक अभिव्यक्ति है जो कक्षा com.abc.MyClass के लिए ऑब्जेक्ट का प्रतिनिधित्व करती है।

ही Class वस्तु भी myClassReference.getClass() विधि बुला यदि आप वर्ग की एक वस्तु के लिए एक संदर्भ है के द्वारा प्राप्त किया जा सकता है।

Class ऑब्जेक्ट का उपयोग क्लास की संरचना, एक्सेस फ़ील्ड्स, विधियों का आह्वान करने और जावा प्रतिबिंब एपीआई का उपयोग करके वर्ग की वस्तुओं को तत्काल करने के लिए किया जा सकता है।

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