2011-06-14 19 views
6

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

क्या यह प्राप्त करने योग्य है?

उत्तर

17
public static <T> T find(Collection<?> arrayList, Class<T> clazz) 
{ 
    for(Object o : arrayList) 
    { 
     if (o != null && o.getClass() == clazz) 
     { 
      return clazz.cast(o); 
     } 
    } 

    return null;  
} 

और आप आप कर सकते हैं जावा 8 उपयोग कर रहे हैं

String match = find(myArrayList, String.class); 
+3

+1 अनचेक कास्ट से बचने के लिए आप 'clazz.cast (o) 'का उपयोग कर सकते हैं। – Howard

+3

आपको उप-वर्गों को संभालने के लिए 'Class.isAssignableFrom' का उपयोग करने की आवश्यकता है, विधि को 'ArrayList' (यानी, इंटरफ़ेस में प्रोग्राम) के बजाय' संग्रह 'लेना चाहिए। विधि नामों को लोअरकेस से शुरू करने के जावा के अनुशंसित कोडिंग मानक का उपयोग करने पर भी विचार करें। –

+0

धन्यवाद, यह उत्तर मेरी समस्या के लिए सबसे अच्छा काम करता है। – Danny

0

आप अपनी सूची से अधिक iterator और प्रत्येक तत्व का परीक्षण

Class<?> zz = String.class; 
for (Object obj : list) { 
    if (zz.isInstance(obj)) { 
     System.out.println("Yes it is a string"); 
    } 
} 

ध्यान दें कि isInstance भी उपवर्गों कब्जा कर सकते हैं। अन्यथा बेला का जवाब देखें।

+0

इसे नीचे गिरा दिया गया है, लेकिन यह बेहतर समाधान प्रतीत होता है जहां आप कक्षा या उप-वर्ग के उप-वर्गों के साथ अनजान हैं; मेरे मामले में, और जैसा कि पोस्ट बताता है। तो नीचे वोट क्यों? यदि कोई अच्छी व्याख्या नहीं दी जा सकती है, तो मैं मतदान कर रहा हूं। –

4
public static <T> T getFirstElementOfTypeIn(List<?> list, Class<T> clazz) 
{ 
    for (Object o : list) 
    { 
    if (clazz.isAssignableFrom(o.getClass())) 
    { 
     return clazz.cast(o); 
    } 
    } 
    return null; 
} 
+0

'clazz.isAssignableFrom (o.getClass())' 'clazz.isInstance (o)' के रूप में लिखा जा सकता है। – user102008

1

फोन:

public <T> Optional<T> getInstanceOf(Class<T> clazz, Collection<?> collection) { 
    return (Optional<T>) collection.stream() 
      .filter(e -> clazz.isInstance(e.getClass())) 
      .findFirst(); 
} 

चेक Optional के प्रलेखन यदि आप इसे पहले कभी उपयोग नहीं। दरअसल यह returning null से बेहतर अभ्यास है।

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