嘿伙计们,我对Java很新,我对收集和迭代器有疑问。
在我的代码中,我有一个集合(在某个地方扩展到Iterable),每个对象基本上都是一个LinkedList。 我需要一个该集合的迭代器,所以我用这种方式写下来:
public class A{
LinkedList<B> BList= new LinkedList<B>();
...
public Iterator<B> iterator() {
return BList.iterator();
}
}
现在,问题是,如何更改迭代器的任何方法?
或者更具体地说,如何禁用迭代器的remove方法?
感谢。
答案 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();
}
}