Credo di aver notato che per alcuni Iterables (come questo IterableString class) viene creato un nuovo iteratore o l'iteratore si reimposta in qualche modo all'inizio con ogni nuovo costrutto foreach ma quello ciò non sembra verificarsi con altri iterabili ...Java Iterables "Ripristino" Iterator con ogni Foreach Construct
ad esempio, se si esegue il seguente codice:
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();
}
}
vedrete il seguente output:
***
O
N
C
E
***
***
T
W
I
C
E
***
T
W
I
C
E
Il secondo ciclo foreach con x sembra iniziare da dove era stato interrotto (dopo l'ultimo elemento), ma il secondo ciclo foreach con y sembra iniziare dal punto in cui è iniziato la prima volta (al primo elemento). Perché questo e come possiamo rendere Iterables che si comportano come quest'ultimo (ArrayLists)?
Più concretamente, con quale precisione modificheremmo una classe come IterableString per funzionare come ArrayList?
cosa diavolo è 'IterableString' ?? quell'oggetto sconosciuto potrebbe avere qualcosa a che fare con il modo in cui l'iteratore è configurato ... – mre
Javadoc per 'Iterable' non sembra dire molto per imporre che ogni chiamata a' iterator() 'restituisca un nuovo' Iterator' - ma quella sembra essere la pratica accettata dal JDK (e ragionevole). Quindi sembra un "bug" di chi abbia mai creato 'IterableString'. –