Java:实现泛型迭代器

Java:实现泛型迭代器,java,iterator,Java,Iterator,我正在学习“头优先”系列的设计模式。这本书有点过时(没有泛型),所以我正试图重写其中的一些。我应该在Iterator上编写Wrapper来像Enumeratormethods一样工作,并使用ArrayList对其进行测试 “原始”版本如下图所示。我试着让它成为一个泛型类,比如,甚至,但没有成功。我还想确定它是否适用于任何类型的迭代器,而不仅仅是ArrayList之类的ArrayList。实施这一点的正确方式是什么 public class IteratorWrapper implements E

我正在学习“头优先”系列的设计模式。这本书有点过时(没有泛型),所以我正试图重写其中的一些。我应该在
Iterator
上编写Wrapper来像
Enumerator
methods一样工作,并使用ArrayList对其进行测试

“原始”版本如下图所示。我试着让它成为一个泛型类,比如
,甚至
,但没有成功。我还想确定它是否适用于任何类型的迭代器,而不仅仅是
ArrayList
之类的
ArrayList
。实施这一点的正确方式是什么

public class IteratorWrapper implements Enumeration {
    Iterator iterator;

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

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

    //Return generic Type T 
    public Object nextElement(){
        return iterator.next();
    }
}
测试班

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

        //This part will be rewritten when wrapper will work  
        IteratorWrapper iteratorWrapper = new IteratorWrapper(arrayList.iterator());

        while(iteratorWrapper.hasMoreElements()){
            System.out.println(iteratorWrapper.nextElement());
        }
    }
}
公共类包装器测试{
公共静态void main(字符串[]args){
ArrayList ArrayList=新的ArrayList();
arrayList.添加(“元素1”);
arrayList.添加(“元素2”);
//当包装器工作时,将重写此部分
IteratorWrapper IteratorWrapper=新的IteratorWrapper(arrayList.iterator());
while(iteratorWrapper.hasMoreElements()){
System.out.println(iteratorWrapper.nextElement());
}
}
}

您可以添加如下通用参数:

public class IteratorWrapper<T> implements Enumeration<T> {
    Iterator<T> iterator;

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

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

    public T nextElement(){
        return iterator.next();
    }
}
IteratorWrapper<String> iteratorWrapper = new IteratorWrapper<String>(arrayList.iterator());
公共类迭代器包装器实现枚举{
迭代器;
公共迭代器包装器(迭代器迭代器){
this.iterator=迭代器;
}
公共布尔值hasMoreElements(){
返回iterator.hasNext();
}
公共T nextElement(){
返回iterator.next();
}
}
然后,您的初始化将如下所示:

public class IteratorWrapper<T> implements Enumeration<T> {
    Iterator<T> iterator;

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

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

    public T nextElement(){
        return iterator.next();
    }
}
IteratorWrapper<String> iteratorWrapper = new IteratorWrapper<String>(arrayList.iterator());
IteratorWrapper IteratorWrapper=新的IteratorWrapper(arrayList.iterator());

您尝试了什么?你犯了什么错误?奇怪。。。我试过这本书的复制品,但它把我弄错了。我想问题在于创建对象并向其传递迭代器。顺便说一句,我还尝试了这个
IteratorWrapper IteratorWrapper=newiteratorwrapper(arrayList.iterator())并且它可以工作-但是。。。这也是启动我的目标的正确方式吗?@ashur:不;迭代器未返回ArrayList。阅读编译器警告。它不使用Eclispe和Java 6编译。无论如何,关键是您的包装器(和迭代器)不必知道迭代器来自ArrayList,因此不需要提及泛型类型ArrayList@Guillaume谢谢,现在我明白了。