Question

public interface IPowerList<T> extends Iterable< T > {

public int bitFlag(List<T> subseq);
}

public class PowerList<T> implements IPowerList<T>{

private List<T> originalList;
private Set<Set<T>> powerList= new HashSet<Set<T>>();

@Override
public Iterator<T> iterator() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int bitFlag(List<T> subseq) {
    // TODO Auto-generated method stub
    return 0;
}

}  

Automatiquement I a été donnée par Eclipse pour mettre en oeuvre un procédé de remplacement pour iterator.

(1) Est-ce parce que j'implémentent une interface qui va de itérables?

(2) Mes variables privées sont des ensembles et lists- ils ont leurs propres itérateurs, je ne pas besoin de définir une nouvelle iterator- alors que dois-je faire? Dois-je effacer l'héritage?

(3) quand est-ce que nous devons définir une nouvelle iterator? quand on définit une classe qu'il est une sorte de collection pour nous? mais je me demande pourquoi, parce que nous utilisons toujours une collection générique, qui ont leur propre iterators..Can vous me donner un exemple?

(4) si j'ajouter à un ensemble de jeux un new HashSet<T>() vous considéreront pour ajouter une liste vide ou l'ajout new HashSet().add(null) sera considérer comme une liste vide?

Était-ce utile?

La solution

(1) Est-ce parce que j'implémentent une interface qui va de itérables?

Oui, vous obtenez la méthode iterator() parce que votre interface étend Iterable. Cela signifie que toute classe qui implémente l'interface doit également mettre en œuvre toutes les méthodes de Iterable. Si vous ne voulez pas, ne se prolongent pas Iterable.

(2) Mes variables privées sont ensembles et lists- ils ont leur propre itérateurs, je ne pas besoin de définir une nouvelle iterator- alors que dois-je faire? Dois-je effacer l'héritage?

Vos membres privés ne sont pas disponibles pour les consommateurs de votre classe, vous avez donc besoin d'un moyen d'exposer ces itérateurs. Comment vous faites cela est à vous, mais cela grâce à votre méthode de iterate() fait beaucoup de sens.

(3) quand est-ce que nous devons définir une nouvelle iterator? lorsque nous définissons une classe que ce genre de collection est pour nous? mais je me demande pourquoi, parce que nous avons toujours utiliser une collection générique, qui ont leurs propres iterators..Can vous donnez moi un exemple?

Si vous créez votre propre collection que vous voulez être itératives, mais qui ne couvre pas une collection déjà des outils Iterable, vous devrez créer votre propre itérateur. Si vous ne vous inquiétez pas, il n'y a pas besoin, bien que vos consommateurs pourraient se sentir différemment.

Autres conseils

(1) Oui, depuis PowerList<T> implements IPowerList<T>, il doit mettre en œuvre Iterator<T> iterator() (ou retourner un sous-type de Iterator<T>).

(2) Laisser l'héritage à Iterable<T>, de cette façon vous pouvez encapsuler vos champs (ils sont privés de toute façon) et seulement exporter un Iterator. Deuxièmement, vous pouvez décider et quel genre de Iterator exportation, et sont plus flexibles à l'avenir (par exemple changer l'ordre d'énumération). Enfin, vous pouvez penser à ne pas étendre Iterable pour votre IPowerList si cela n'a rien à voir avec Itérations (il me semble de cette façon), mais plutôt faire Powerlist mettre en œuvre les deux interfaces (héritage multiple sur les interfaces est autorisée en Java).

(3) Par exemple, lorsque vous rédigez une nouvelle collection, par exemple l'ensemble de vos jeux. Ou quand vous voulez changer la façon dont un iterator se comporte, par exemple l'ordre d'énumération ou si l'itérateur peut ajouter et supprimer des éléments. Par exemple, j'ai une structure d'arbre qui peut retourner un tas de différents itérateurs (et met en œuvre plusieurs interfaces Iterator et similaires).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top