Originariamente inviato da trinity_84
ma come lo faccio il metodo:
boolean hasPrevious()
T previous() //uso di generici
Posto un esempio che non usa i generics e non ha metodi per modificare la collezione (tanto è solo di esempio per far capire l'iteratore):
codice:
import java.util.*; // Solo per NoSuchElementException
public class Prova
{
public static void main (String[] args)
{
MyArray myArr = new MyArray ();
StringIter iter = myArr.getStringIter ();
while (iter.hasNext ())
System.out.println (iter.next ());
}
}
interface StringIter
{
boolean hasNext ();
String next ();
}
class MyArray
{
private String[] array = { "pippo", "pluto", "paperino" };
public StringIter getStringIter ()
{
return new StringIterImpl ();
}
private class StringIterImpl implements StringIter
{
private int index;
public boolean hasNext ()
{
return index < array.length;
}
public String next ()
{
if (index < array.length)
return array[index++];
else
throw new NoSuchElementException ();
}
}
}
La classe che implementa l'iteratore (StringIterImpl) è una inner class di MyArray. E nota che ha una variabile di istanza che fa da indice nella struttura interna. Quindi è chiaro che ci deve essere una relazione molto stretta tra la collezione e l'iteratore. Perché l'iteratore deve innanzitutto mantenere uno stato che indica l'avanzamento della iterazione e deve poter sapere come è fatta la struttura della collezione per capire se ci sono ancora elementi e come prelevarli.