Java:实现通用迭代器

时间:2013-06-12 17:09:02

标签: java iterator

我正在学习“Head First”系列中的设计模式。这本书有点过时(没有通用类型),所以我试图重写一些。我应该在Iterator上编写 Wrapper ,以便像Enumerator方法一样工作,并使用ArrayList 进行测试。

“原始”版本看起来像这样(下图)。我试图让它成为通用类,例如<E>甚至<T<E>>,但它不起作用。我想确保它适用于任何类型的迭代器,而不仅仅是ArrayList ArrayList<T>。实现这个的正确方法是什么?

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());
        }
    }
}

1 个答案:

答案 0 :(得分:3)

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

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());