मेरा मानना है कि मैंने देखा है कि कुछ Iterables (जैसे IterableString class) के लिए या तो एक नया इटरेटर बनाया गया है या इटेटरेटर किसी भी तरह से हर नए फोरच निर्माण के साथ शुरुआत में रीसेट करता है लेकिन वह यह अन्य Iterables के साथ हो लिए ...जावा इटेरबल्स "रीसेटिंग" इटरेटर प्रत्येक फोरैच का निर्माण
उदाहरण के लिए प्रतीत नहीं होता है, तो आपको निम्न कोड चलाते हैं:
***
O
N
C
E
***
***
T
W
I
C
E
***
T
W
I
C
E
:
import java.util.ArrayList;
public class test {
public static void main(String args[]) {
IterableString x = new IterableString("ONCE");
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
ArrayList y = new ArrayList();
y.add('T');
y.add('W');
y.add('I');
y.add('C');
y.add('E');
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println();
}
}
आप निम्नलिखित उत्पादन देखेंगे
एक्स के साथ दूसरा फोरैच लूप शुरू होता है जहां यह छोड़ा गया था (आखिरी वस्तु के बाद), लेकिन वाई के साथ दूसरा फोरैच लूप उस समय से शुरू होता है जहां उसने पहली बार (पहली आइटम पर) शुरू किया था। यह क्यों है और हम इटरटेबल्स कैसे बना सकते हैं जो उत्तरार्द्ध (ArrayLists) की तरह व्यवहार करते हैं?
अधिक ठोस रूप से, हम एररलिस्ट जैसे काम करने के लिए IterableString जैसे वर्ग को वास्तव में कैसे संशोधित करेंगे?
क्या बिल्ली 'है IterableString' ?? अज्ञात ऑब्जेक्ट के पास इटरेटर कॉन्फ़िगर किए जाने के तरीके के साथ कुछ करने के लिए हो सकता है ... – mre
'Iterable' के लिए जावाडोक यह कहने के लिए बहुत कुछ नहीं लगता है कि प्रत्येक कॉल 'इटेटर()' को एक नया' Iterator 'देता है - लेकिन यह जेडीके (और समझदार) द्वारा स्वीकार्य अभ्यास प्रतीत होता है। तो यह कभी भी "बग" जैसा दिखता है जिसने कभी 'IterableString' बनाया है। –