तकनीकी रूप से, आप CAN उपयोग instanceof
यदि एक वस्तु एक निश्चित प्रकार है की जाँच करने के।
हालांकि ... एक अच्छा विचार है।
तरह से आप अपने विधि घोषित कर दिया है, यह किसी भी प्रकार की एक सूची को स्वीकार कर सकते हैं, इसलिए यह जरूरी एक या बी
होने जा रहा नहीं है
यह बताने के लिए आप क्या करने की कोशिश कर रहे हैं क्या मुश्किल है , लेकिन आपको शायद अपनी विधि जेनेरिक बनाना चाहिए।
आप इस तरह ऐसा कर सकते हैं:
public static <T> String method(List<T> arg) {
// We now know that the type of the list is T, which is
// determined based on the type of list passed to this
// method. This would demonstrate the point better if
// the return type was T, but I'm leaving the return type
// as String, because that's what your code returns.
}
यहाँ एक बेहतर उदाहरण है:
आप एक सामान्य विधि है कि एक सूची के पहले तत्व देता है बनाना चाहते हैं, तो आप ऐसा करेंगे:
public static <T> T firstElement(List<T> theList) {
if (theList == null) {
return null;
}
T objectOfTypeT = theList.get(0);
return objectOfTypeT;
}
ध्यान दें कि वापसी प्रकार अब T
है।
क्योंकि हमने इस विधि को जेनेरिक बनाया है, यह सूची में उपयोग किए जाने वाले उसी प्रकार को वापस कर सकता है।
आप आमतौर पर केवल theList.get(0)
लौटाएंगे, लेकिन मैंने जेनरिक के उद्देश्य को और स्पष्ट बनाने के लिए एक पंक्ति जोड़ा।वाक्य रचना की
स्पष्टीकरण:
<T>
इंगित करता है कि इस विधि टी
T
कि तुरंत इस प्रकार वापसी प्रकार है नामित एक प्रकार पैरामीटर लेता है (जैसे आप सामान्य वापसी स्ट्रिंग, इंटीजर, आदि ...)।
सूची पैरामीटर में T
यह है कि संकलक जानता है कि बिल्ली T
हैक क्या है। "इस विधि की उम्मीद प्रकार टी के बारे में कुछ ओह देखो ... सूची, किसी को इस विधि के लिए तार की एक सूची से गुजरता है प्रकार टी की भी है टी से:
इस संकलक कहने के लिए अनुमति देता है एक स्ट्रिंग होना चाहिए। किसी को इस विधि को पूर्णांकों की एक सूची से गुजरता है, टी एक पूर्णांक होना चाहिए। "
इसके विपरीत, अपने विधि केवल एक स्ट्रिंग लौट सकते हैं और यह पता नहीं किस प्रकार में प्रयोग किया जाता है सूचि।
भी ...
ए और बी दोनों एक ही कक्षा, TheParentClass नामित विस्तार, तो आप इस तरह अपने प्रणाली की घोषणा कर सकता है:
public static String method(List<? extends TheParentClass> arg)
इस तरह, आप जानते होंगे आपके पैरामीटर के संभावित प्रकारों के बारे में थोड़ा और (और संकलित समय प्रकार की जांच से लाभ प्राप्त कर सकते हैं)।
पैरामीटर प्रकार को '> 'के रूप में घोषित करने का अर्थ है कि आप वास्तविक प्रकार में रुचि नहीं रखते हैं। – biziclop
इस http://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – evanwong
@evanwong का डुप्लिकेट - सुनिश्चित नहीं है कि मैं इसे एक डुप्ली से सहमत करूंगा। – djangofan