3 votes

Java: Implémentation de l'itérateur générique

Je suis en train d'apprendre les design patterns de la série 'Head First'. Le livre est un peu dépassé (pas de types génériques), donc j'essaie de le réécrire. Je suis censé écrire Wrapper sur Iterator pour fonctionner comme les méthodes Enumerator et le tester avec ArrayList.

La version "originale" ressemblait à cela (ci-dessous). J'ai essayé de faire une classe générique telle que ou même >, mais cela n'a pas fonctionné. Je veux aussi être sûr que cela fonctionnera pour n'importe quel type d'itérateur, pas seulement ArrayList comme ArrayList. Quelle est la bonne manière de mettre en œuvre cela ?

public class IteratorWrapper implements Enumeration {
    Iterator iterator;

    public IteratorWrapper(Iterator iterator){
        this.iterator = iterator;
    }

    public boolean hasMoreElements(){
        return iterator.hasNext();
    }

    //Retourne le type générique T 
    public Object nextElement(){
        return iterator.next();
    }
}

Classe de test

public class WrapperTest {
    public static void main(String[] args){
        ArrayList arrayList = new ArrayList();
        arrayList.add("element1");
        arrayList.add("element2");

        //Cette partie sera réécrite lorsque le wrapper fonctionnera  
        IteratorWrapper iteratorWrapper = new IteratorWrapper(arrayList.iterator());

        while(iteratorWrapper.hasMoreElements()){
            System.out.println(iteratorWrapper.nextElement());
        }
    }
}

3voto

Guillaume Points 6131

Vous pouvez ajouter un paramètre générique comme ceci :

public class IteratorWrapper implements Enumeration {
    Iterator iterator;

    public IteratorWrapper(Iterator iterator){
        this.iterator = iterator;
    }

    public boolean hasMoreElements(){
        return iterator.hasNext();
    }

    public T nextElement(){
        return iterator.next();
    }
}

Ensuite, votre initialisation ressemblera à ceci :

IteratorWrapper iteratorWrapper = new IteratorWrapper(arrayList.iterator());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X