मैं इस तरह की चीज़ को काम करने के लिए कैसे प्राप्त कर सकता हूं? मैं जांच सकता हूं कि (obj instanceof List<?>)
है लेकिन (obj instanceof List<MyType>)
नहीं है। क्या ऐसा कोई तरीका है?सूची <MyType> कैसे उदाहरण के लिए?
उत्तर
यह संभव नहीं है क्योंकि जेनेरिक के संकलन समय पर डाटाटाइप मिटा देता है।
public class GenericList <T> extends ArrayList<T>
{
private Class<T> genericType;
public GenericList(Class<T> c)
{
this.genericType = c;
}
public Class<T> getGenericType()
{
return genericType;
}
}
ठीक है क्या इसे जांचने का कोई वैकल्पिक तरीका है? –
धन्यवाद, मुझे लगता है कि मैं जेनेरिक प्रकार को उस फ़ंक्शन में पास कर दूंगा जिसे मैं कॉल कर रहा हूं और दोनों आइटमों की जांच कर रहा हूं। –
आप शायद प्रतिबिंब का उपयोग करने की जांच करने के लिए उन्हें के प्रकार प्राप्त करने की आवश्यकता: ऐसा करने का केवल संभव तरीके आवरण किसी तरह का है कि रखती है जो प्रकार सूची रखती है लिखने के लिए है। सूची के प्रकार के प्राप्त करने के लिए: Get generic type of java.util.List
जहाँ तक मुझे पता है, यह केवल फ़ील्ड के लिए काम करता है, लेकिन इसका उल्लेख करने के लिए +1। –
if(!myList.isEmpty() && myList.get(0) instanceof MyType){
// MyType object
}
... और एक खाली सूची के लिए? कुछ विचार? – Gewure
हाँ। खाली सूची के लिए यह एकमात्र विकल्प उपलब्ध है। https://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – Sathish
यह उत्तर सुरक्षित नहीं है, क्योंकि यदि 0 तत्व एक MyType है, तो अन्य तत्व अन्य प्रकार हो सकते हैं । उदाहरण के लिए, शायद सूची को ArrayList
आप सत्यापित कर रहे हैं, तो वस्तु की एक सूची या मानचित्र मूल्य का एक संदर्भ एक संग्रह का एक उदाहरण है, बस आवश्यकता सूची का एक उदाहरण बना सकते हैं और प्राप्त अपने वर्ग ...
Set<Object> setOfIntegers = new HashSet(Arrays.asList(2, 4, 5));
assetThat(setOfIntegers).instanceOf(new ArrayList<Integer>().getClass());
Set<Object> setOfStrings = new HashSet(Arrays.asList("my", "name", "is"));
assetThat(setOfStrings).instanceOf(new ArrayList<String>().getClass());
आपके 'setOfIntegers' और' setOfStrings' का बिंदु क्या है? – DanielM
@DanielM ने अभी नमूना अपडेट किया है। यह उन संदर्भों का उपयोग करना चाहिए! धन्यवाद! –
इस हैं (@ Martijn का जवाब) यह (जाँच पहला तत्व के प्रकार कुछ भी नहीं की गारंटी देता है) निरर्थक सूची यात्रा से बचने के लिए कास्टिंग के बिना इसे पारित करने के बेहतर है जेनरिक के साथ लिपटे नहीं किया जा सकता। हम प्रत्येक तत्व को कोड के टुकड़े में डाल सकते हैं जहां हम सूची को पुन: सक्रिय करते हैं।
Object attVal = jsonMap.get("attName");
List<Object> ls = new ArrayList<>();
if (attVal instanceof List) {
ls.addAll((List) attVal);
} else {
ls.add(attVal);
}
// far, far away ;)
for (Object item : ls) {
if (item instanceof String) {
System.out.println(item);
} else {
throw new RuntimeException("Wrong class ("+item .getClass()+") of "+item);
}
}
इसके बजाय आप instanceof का उपयोग कर के कई तरीके शामिल करने के लिए एक नकली कारखाने का उपयोग कर सकते हैं:
public class Message1 implements YourInterface {
List<YourObject1> list;
Message1(List<YourObject1> l) {
list = l;
}
}
public class Message2 implements YourInterface {
List<YourObject2> list;
Message2(List<YourObject2> l) {
list = l;
}
}
public class FactoryMessage {
public static List<YourInterface> getMessage(List<YourObject1> list) {
return (List<YourInterface>) new Message1(list);
}
public static List<YourInterface> getMessage(List<YourObject2> list) {
return (List<YourInterface>) new Message2(list);
}
}
यह किया जा सकता है आपको लगता है कि object
जाँच करना चाहते हैं, तो List<T>
का उदाहरण है, जो खाली नहीं है:
if(object instanceof List){
if(((List)object).size()>0 && (((List)object).get(0) instanceof MyObject)){
// The object is of List<MyObject> and is not empty. Do something with it.
}
}
- 1. सूची <X> से सूची <Y> पर सूची के लिए छोटा वाक्यविन्यास?
- 2. <t> सूची के लिए Arraylist?
- 3. स्ट्रिंग [] के लिए सूची <int> कैसे परिवर्तित करें?
- 4. सूची <T>
- 5. System.Linq.Enumerable.WhereListIterator <int> को <int> सूची में कनवर्ट करने के लिए कैसे करें?
- 6. एक सूची के लिए डेटा आइटम जोड़ने के लिए कैसे <Struct>
- 7. कैसे उदाहरण के लिए vb.net
- 8. कैसे सब उदाहरण के डेटाबेस के लिए उपयोगकर्ताओं की सूची प्राप्त करने के लिए
- 9. उदाहरण के लिए उदाहरण प्राप्त करें-आईडी
- 10. सूची नियंत्रक उदाहरण चर
- 11. स्केल के लिए उदाहरण उदाहरण?
- 12. सूची <String> सूची <Object>
- 13. सूची <Object> बनाम सूची <dynamic>
- 14. कास्ट सूची <T> सूची में <Interface>
- 15. सूची बदलने के लिए ICollectionView <T>
- 16. सूची <Object> और सूची <?>
- 17. सी # में ReadOnlyCollection <string> सूची <string> कन्वर्ट करने के लिए कैसे
- 18. सूची कैसे डालें <? fz><Foo> सूचीबद्ध करने के लिए विस्तारित करता है
- 19. एक IQueryable <T> सूची <T> पर कनवर्ट करने के लिए कैसे करें?
- 20. सूची <string>
- 21. सूची <T>
- 22. सी ++ 0x प्रारंभकर्ता सूची उदाहरण
- 23. समानता के लिए दो सूची <string> तुलना
- 24. indexOf() सूची <object>
- 25. सी # सूची <string[]> सूची <object[]> रूपांतरण
- 26. परिवर्तित सूची <Integer> सूची में <String>
- 27. सूची <T>
- 28. सूची <T> सूची चाहिए। सूची <T> के साथ पहले से हटाएं। विशेषज्ञ?
- 29. सी # सूची <T>
- 30. उदाहरण के लिए एंड्रॉयड
देखें http://docs.oracle.com/javase/tutorial/java/generics/erasure.html की [parameteri के खिलाफ जांच instanceof नहीं जा सकता –
संभव डुप्लिकेट जेड प्रकार ArrayList] (http://stackoverflow.com/questions/7335018/cannot-perform-instanceof-check-against-parameterized-type-arraylistfoo) –