2012-03-30 12 views
5

मैं समझता हूं कि कौन से रैपर हैं, लेकिन प्रलेखन से आप टाइप int के क्लास ऑब्जेक्ट का उदाहरण प्राप्त करने में सक्षम हैं। क्या यह आवरण के रैपर या किसी प्रकार के क्लास इंस्टेंस को वापस करता है? क्योंकि जेनेरिक और टाइप एरर के कारण यह समझ में नहीं आता है। क्या यह सच नहीं है कि आप केवल वास्तविक वर्गों के क्लास उदाहरण प्राप्त कर सकते हैं जो प्राइमेटिव नहीं हैं? जब वे प्रतिनिधित्व करते हैं तो उनका मतलब कुछ और का आवरण होता है?int.class वापसी

यहाँ JavaDoc का कहना है, और कारण है कि मैं उलझन में हूँ

TYPE 

public static final Class TYPE 

    The Class instance representing the primitive type int. 

    Since: 
     JDK1.1 
+1

मैं जेनरिक और प्रकार विलोपन की वजह से "के तर्क का पालन नहीं करते ... क्या यह सच नहीं है कि आप केवल वास्तविक वर्गों के 'कक्षा' उदाहरण प्राप्त कर सकते हैं [और] प्राइमेटिव नहीं? " जेनेरिक और टाइप एरर के पास कक्षाओं और प्राइमेटिव के बीच अंतर के साथ कुछ लेना देना नहीं है। –

+1

आपको 'void.class' पसंद है :-) – Thilo

उत्तर

7

यह सच नहीं है कि आप केवल वास्तविक नहीं कक्षाएं पुरातन की कक्षा उदाहरणों मिल सकता है?

क्रमबद्ध करें।

लेकिन कभी-कभी आपको "आदिम पूर्णांक" के लिए कुछ मेटा-डेटा होना चाहिए। उदाहरण के लिए विधि हस्ताक्षर को देखते समय। फिर आपको पैरामीटर के लिए Class[] मिलता है, और आपको किसी भी तरह public void test(Integer x) और public void test(int x) के बीच अंतर करने की आवश्यकता है।

तो इसे सुविधाजनक बनाने के लिए, प्राचीन प्रकार के लिए विशेष कक्षा के उदाहरण हैं।

इस एक कदम आगे ले करने के लिए, वहाँ भी java.lang.Void.TYPE है:

Class<Void> x = void.class; 

व्यावहारिक Javadoc:

/** 
* Determines if the specified <code>Class</code> object represents a 
* primitive type. 
* 
* <p> There are nine predefined <code>Class</code> objects to represent 
* the eight primitive types and void. These are created by the Java 
* Virtual Machine, and have the same names as the primitive types that 
* they represent, namely <code>boolean</code>, <code>byte</code>, 
* <code>char</code>, <code>short</code>, <code>int</code>, 
* <code>long</code>, <code>float</code>, and <code>double</code>. 
* 
* <p> These objects may only be accessed via the following public static 
* final variables, and are the only <code>Class</code> objects for which 
* this method returns <code>true</code>. 
* 
* @return true if and only if this class represents a primitive type 
* 
* @see  java.lang.Boolean#TYPE 
* @see  java.lang.Character#TYPE 
* @see  java.lang.Byte#TYPE 
* @see  java.lang.Short#TYPE 
* @see  java.lang.Integer#TYPE 
* @see  java.lang.Long#TYPE 
* @see  java.lang.Float#TYPE 
* @see  java.lang.Double#TYPE 
* @see  java.lang.Void#TYPE 
* @since JDK1.1 
*/ 
public native boolean isPrimitive(); 
+2

आपको कभी-कभी इन विशेष वर्ग प्रकारों के लिए भी देखना होगा। मैं एक बार कुछ कोड लिख रहा था जहां मैंने .getSuperclass() सोचते हुए कहा कि मैं ठीक होगा, क्योंकि सबकुछ ऑब्जेक्ट से आता है, है ना? नहीं। – xxpor

+0

मुझे यह दिलचस्प लगता है कि 'Integer.TYPE' को 'कक्षा ' के रूप में 'कक्षा ' के बजाय घोषित किया गया है - थोड़ा ग़लत लगता है। –

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