2012-10-22 11 views
7

मुझे प्रतिबिंब नहीं है इसलिए यह प्रश्न स्पष्ट हो सकता है। उदाहरण के लिएजांचें कि java.lang.reflect.Field प्रकार एक बाइट सरणी है

public class Document { 

    private String someStr;  

    private byte[] contents; 

    //Getters and setters 

} 

मैं अगर क्षेत्र contents बाइट सरणी का एक उदाहरण है की जाँच करने के कोशिश कर रहा हूँ: मैं एक वर्ग है। मैं क्या करने की कोशिश की:

Class clazz = Document.class; 
Field[] fields = clazz.getDeclaredFields(); 
for (Field field : fields) { 
    if (field.getType().isArray()) { 
     Object array = field.getType(); 
     System.out.println(array); 
    } 
} 

इस कोड के उत्पादन में है: class [B। मुझे लगता है कि बाइट सरणी पाया जाता है, लेकिन अगर मैं कार्य करें:

if (array instanceof byte[]) {...} 

इस हालत कभी नहीं true है। ऐसा क्यों है? और यह जांचने के लिए कि क्या ऑब्जेक्ट में फ़ील्ड हैं जो byte[] के प्रकार हैं?

उत्तर

15

array instanceof byte[] जाँच करता है कि array प्रकार byte[] का एक उद्देश्य है। लेकिन आपके मामले में arraybyte[] नहीं है, यह Class का एक ऑब्जेक्ट है जो byte[] का प्रतिनिधित्व करता है।

आप एक Class कि कुछ प्रकार के रूप में TT.class का प्रतिनिधित्व करता है का उपयोग कर सकते हैं, इसलिए आप निम्नलिखित की जांच की जरूरत है:

if (array == byte[].class) { ... } 
+0

धन्यवाद, अब मुझे यह मिल गया है :) –

0

आप का प्रयास करें:

Class<?> array = field.getType(); 
System.out.println(array.getCanonicalName()); 

यह byte[] प्रिंट करता है। लेकिन @ एक्स्टाव का जवाब बेहतर है।

7

यदि सरणी है एक वर्ग केवल instanceof Class सच हो जाएगा ..

आप तो एक क्षेत्र के प्रकार आप उपयोग कर सकते

if(field.getType() == byte[].class) 
3

इस प्रयास करें जाँच करना चाहते हैं:

Class<?> cls = field.getType(); 
if (cls.isAssignableFrom(byte[].class)) { 
    System.out.println("It's a byte array"); 
} 
संबंधित मुद्दे