Donc j'ai une classe Tree<E>
où E
est le type de données détenu et organisé par l'arbre. Je voudrais itérer l'arbre comme celui-ci, ou d'une manière similaire à ceci:Iterators Java - Essayer d'avoir un pour chaque boucle au travail
1. Tree<String> tree=new Tree<String>();
2. ...add some nodes...
3. for (String s : tree)
4. System.out.println(s);
Il me donne une erreur sur la ligne 3 cependant.
Incompatible types
required: java.lang.String
found: java.lang.Object
Ce qui suit fonctionne cependant très bien et comme prévu, l'exécution d'un bon dans l'ordre traversal de l'arbre et l'impression de chaque noeud comme il se doit:
for (TreeIterator<String> i = tree.iterator(); i.hasNext();)
System.out.println(i.next());
Ma classe d'arbre ressemble à ceci :
public class Tree<E> implements java.lang.Iterable{
...
public TreeIterator<E> iterator(){
return new TreeIterator<E>(root);//return an iterator for the root node
}
....
}
Et ma classe TreeIterator ressemble à ceci:
public class TreeIterator<E> implements java.util.Iterator<E>{
public E next(){
...
}
...
}
Mais je veux que la boucle for (String s : tree)
fonctionne correctement - des idées? Le but de tout cela était de mettre en place une boucle propre foreach pour l'utiliser dans mon programme, de ne pas utiliser cette boucle moche.
Une idée de ce que je fais mal?
Modifier:
Conformément à la best answer (et another equally good answer qui a été publié peu de temps après), ce qui suit fait fonctionner:
Changer
public class Tree<E> implements java.lang.Iterable{
....
}
à
public class Tree<E> implements java.lang.Iterable<E>{
....
}
... Merci les gars!
Votre erreur est que votre itérateur retourne un 'Object' au lieu d'un' String'. –
Note: J'ai ajouté du code supplémentaire. Aussi, @Jordan: Par mon itérateur voulez-vous dire la fonction next()? En ce moment, quand j'essaie de changer next() de retourner un E à un objet, il me donne une erreur et dit de le changer. –