【发布时间】:2014-09-25 08:50:01
【问题描述】:
我扩展了一个带有索引的 TreeSet,因此所有的添加/删除操作都需要被覆盖,以使索引保持最新(为简洁起见,从下面的代码中省略)。然而,默认迭代器允许删除元素,这绕过了这一点,因此需要设为只读。但是,当我在集合上创建不可修改的视图时,它会调用迭代器导致无限循环。我没有成功地尝试使用 casts 和 super。如何创建没有无限循环的只读迭代器?
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class MySet<T> extends TreeSet<T>
{
// StackOverflowError
@Override public Iterator<T> iterator()
{return Collections.unmodifiableSortedSet(this).iterator();}
// Compile Error
// @Override public Iterator<T> iterator()
// {return Collections.unmodifiableSortedSet(super).iterator();}
public static void main(String[] args)
{new MySet().iterator();}
}
【问题讨论】:
-
使用组合而不是继承可能更简单。
标签: java collections iterator