Comment puis-je rendre ma classe itérable pour pouvoir utiliser la syntaxe foreach?
J'ai Book
et BookList
classes. BookList
est quelque chose comme ceci:
public class BookList
{
private final List<Book> bList = new ArrayList<Book>();
public int size() { return bList.size(); }
public boolean isEmpty() { ... }
public boolean contains(Book b) { ... }
public boolean add(Book b) { ... }
public boolean remove(Book b) { .. }
public void clear() { ... }
public Object get(int index) { ... }
}
Dans ma classe principale je veux imprimer des titres de livres dans une boucle for each:
for(Book b : bList)
{
b.print();
}
Eclipse dit:
Ne peut itérer sur un tableau ou d'une instance de java.lang.Itérable
Comment puis-je obtenir ce travail?
source d'informationauteur mk_
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour mettre en œuvre les
objet iterable
de l'interface, ce qui signifie que vous avez besoin pour mettre en œuvre lesiterator()
méthode. Dans votre cas, cela pourrait ressembler à quelque chose comme ceci:Mettre en œuvre les
objet iterable
interface. Cela signifie que vous devez mettre en œuvre une méthode qui retourne unIterator
objet qui va itérer sur les éléments d'unBookList
.Dans ce cas, votre
iterator()
méthode pourrait simplement retourner le résultat de l'appel d'bList.iterator()
. (Qui sera la cause defor (Book b : somBookList)
pour itérer sur lesBook
objets dans leBookList.bList
... )Dans d'autres cas, vous pourriez avoir besoin d'écrire votre propre
Iterator<T>
mise en œuvre de la classe, complet avecT next()
boolean hasNext()
etremove()
méthodes. Par exemple, si vous souhaitez empêcher de code externe de supprimer les éléments de laBookList
par l'intermédiaire de votre itérateur, vous pouvez l'appliquer comme ceci:Ici, nous pouvons voir que la simple mise en œuvre de la LinkedList avec itérateur foreach et de la syntaxe
Pour être plus précis sur la façon de "mettre en œuvre le
Iterable
interface":Pour rendre une classe iteratable vous avez besoin pour mettre en œuvre
Iterable
Interface.a) de Déclarer la classe en tant que ci-dessous
b) Remplacer les
iterator()
MéthodeLire Plus.
Espérons qu'il saura vous aider.