如何更改迭代器的方法?

时间:2010-11-26 02:40:39

标签: java iterator

嘿伙计们,我对Java很新,我对收集和迭代器有疑问。

在我的代码中,我有一个集合(在某个地方扩展到Iterable),每个对象基本上都是一个LinkedList。 我需要一个该集合的迭代器,所以我用这种方式写下来:

public class A{

     LinkedList<B> BList= new LinkedList<B>();

    ...

    public Iterator<B> iterator() {
        return BList.iterator();
    }
}

现在,问题是,如何更改迭代器的任何方法?
或者更具体地说,如何禁用迭代器的remove方法?

感谢。

2 个答案:

答案 0 :(得分:5)

您可以返回不可修改列表的迭代器:

import java.util.Collections;

...

public class A{

    LinkedList<B> BList= new LinkedList<B>();

    ...

    public Iterator<B> iterator() {
        return Collections.unmodifiableList(BList).iterator();
    }
}

这将使用一个不允许对列表结构进行任何更改(如删除)的实现来包装List。然后根据包装列表返回一个迭代器。

答案 1 :(得分:3)

如果您想要一个不可修改的列表,请使用此处发布的其他答案。但是如果要禁用删除,可能的方法是创建一个扩展Iterator接口的新类,但其remove()方法抛出异常(或者什么也不做)并转发其他所有异常原始迭代器对象的方法:

public class MyIterator implements Iterator {
    private Iterator wrappedIterator;

    public MyIterator( Iterator it ) {
        wrappedIterator = it;
    }

    public void remove( blabla ) {
        //do nothing or raise an error, whatever floats your boat
    }

    public void otherIteratorMethod() {
        wrappedIterator.otherIteratorMethod();
    }
 }