2011-10-17 23 views
9

मैं कुछ जावा कोड देख रहा हूं, और यह कोड है जो मैं अक्सर देखता हूं।Foo.class यह क्या करता है?

Foo.class 

इसका उपयोग कक्षा के प्रकार को इंगित करने के लिए किया जा रहा है?

Foo.GetType(); 
typeof(Foo); 

सी # में समान है?

इसका उपयोग किस लिए किया जा रहा है? और इसका क्या अर्थ है?

+1

कुछ संबंधित जानकारी: 'System.Type' .NET में एक सामान्य प्रकार है, और सी # के लिए विशिष्ट नहीं है। मुझे नहीं पता कि जेवीएम में 'कक्षा' प्रकार के लिए यह सच है या नहीं (जैसा कि जावा भाषा के विपरीत है)। –

+0

जावा से आने वाली जानकारी के इस टुकड़े को ढूंढना बहुत मुश्किल है। मैंने "सी # क्लास ऑब्जेक्ट", "सी # क्लास टू रेफरेंस" की खोज की और कई अन्य शब्दों को यह नहीं पता कि इसे सी # में 'टाइप' कहा जाता है - केवल एक चीज जो आपको मिलेगी वो ट्यूटोरियल और ओओपी के लिए परिचय हैं। लेकिन उस प्रश्न के लिए धन्यवाद :-) – Mitja

उत्तर

12

हाँ, जावा में Foo.class सी # में typeof(Foo) के बराबर है। कक्षा साहित्य पर अधिक जानकारी के लिए section 15.8.2 of the JLS देखें।

यह एक संदर्भ है, जो एक वस्तु का निष्पादन समय प्रकार हो जाता है पर GetType() बुला के रूप में नहीं ही है। जावा समकक्ष someReference.getClass() है।

सी # की तुलना में जावा कोड में इसे अधिक बार देखने के कारण जेनिक्स के संबंध में है। ऐसा लगता है कि कुछ है करने के लिए पूरी तरह से असामान्य बात नहीं है:

public class Generic<T> 
{ 
    private final Class<T> clazz; 

    public Generic(Class<T> clazz) 
    { 
     this.clazz = clazz; 
    } 
} 

प्रतिबिंब आदि के लिए वर्ग के लिए यह अनुमति देता है निष्पादन समय का उपयोग यह जावा में केवल आवश्यक है कारण के प्रकार विलोपन, जिसके तहत एक सामान्य प्रकार का ऑब्जेक्ट कर सकते हैं निष्पादन समय पर आमतौर पर इसके प्रकार के तर्क निर्धारित नहीं करते हैं।

+0

भयानक। धन्यवाद। – DarthVader

+0

महान। मुझे यह थोड़ा मजाकिया लगता है कि वे इसे क्लैज कहते हैं :) – DarthVader

+2

@ user177883: ठीक है, यह एक सम्मेलन है। अन्य अलग-अलग नामों का उपयोग कर सकते हैं। ऐसा इसलिए है क्योंकि 'कक्षा' एक कीवर्ड है। –

2

जावा में विशेष श्रेणी है जिसे कक्षा कहा जाता है। यह ऑब्जेक्ट विरासत में मिलता है। इसका उदाहरण जावा रनटाइम में कक्षाओं और इंटरफेस का प्रतिनिधित्व करता है, और यह enum, सरणी, आदिम जावा प्रकार (बूलियन, बाइट, चार, लघु, int, लंबा, फ्लोट, डबल) और कुंजी शब्द शून्य का प्रतिनिधित्व करता है। जब एक वर्ग लोड होता है, या क्लास लोडर के विधि defineClass() को JVM द्वारा बुलाया जाता है, तो JVM क्लास ऑब्जेक्ट बनाता है।

जावा हमें कई तरीकों से कक्षा के इसी वर्ग वस्तु को बनाने की अनुमति देता है, और .class उनमें से एक है। उदा।

Class c1 = String.class; 
संबंधित मुद्दे