2008-12-12 9 views

उत्तर

44

Iterable<String>IEnumerable<string> के बराबर है ।

अगर एरे लागू Iterable लागू होता है तो यह टाइप सिस्टम में एक विषमता होगी। String[]Object[] का एक उदाहरण है, लेकिन Iterable<String>Iterable<Object> नहीं है। कक्षाएं और इंटरफेस अलग जेनेरिक तर्कों के साथ समान जेनेरिक इंटरफेस को लागू नहीं कर सकते हैं।

String[] लूप के लिए बढ़ाए गए Iterable की तरह काम करेगा।

String[] आसानी से एक Iterable में बदल सकता है:

Iterable<String> strs = java.util.Arrays.asList(strArray); 

सरणियों से अधिक संग्रह (गैर पुरातन के लिए वैसे भी) पसंद करते हैं। संदर्भ प्रकारों की Arrays थोड़ा अजीब हैं, और जावा 1.5 के बाद शायद ही कभी इसकी आवश्यकता है।

+2

_why_ आप Iterable और Iterable के बीच डाली नहीं कर सकते हैं के बारे में अधिक जानकारी के लिए, बाहर की जाँच [सहप्रसरण और contravariance] (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29)। –

+0

ठीक है, तो अब कमरे में 500-एलबी गोरिल्ला को संबोधित करते हैं। आप 'Iterable ' का उपयोग कैसे करते हैं? जावा में समकक्ष 'उपज वापसी 'कथन क्या है? – BrainSlugs83

+0

@ BrainSlugs83 मुझे लगता है कि यह एक अलग सवाल है। –

8

आप Iterable<String> के लिए देख रहे हैं?

Iterable<T> <=> IEnumerable<T> 
Iterator<T> <=> IEnumerator<T> 
2

मेरा मानना ​​है कि जावा समतुल्य Iterable<String> है। वैसे भी तत्व से अधिक लूप हालांकि String[] इसे लागू नहीं है, आप कर सकते हैं:

String[] strings = new String[]{"this", "that"}; 
for (String s : strings) { 
    // do something 
} 

तुम सच में कुछ है कि Iterable<String> लागू करता है की जरूरत है, तो आप ऐसा कर सकते हैं:

String[] strings = new String[]{"this", "that"}; 
Iterable<String> stringIterable = Arrays.asList(strings); 
0

Iterable<T> ठीक है, लेकिन एक छोटी सी समस्या है। इसका उपयोग stream() i.e lambda अभिव्यक्तियों में आसानी से नहीं किया जा सकता है।

यदि आप ऐसा चाहते हैं, तो आपको इसे स्प्लिटरेटर मिलना चाहिए, और StreamSupport() कक्षा का उपयोग करना चाहिए।

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