具有类型混淆的自定义Java迭代器

时间:2009-08-17 21:38:54

标签: java generics iterator

我有一个泛型类,它捆绑了一个Object和一个订单:

public class OrderedObject<T> {
    private int order;
    private T object;

    public OrderedObject(int order, T object) {
        this.order = order;
        this.object = object;
    }

    public int getOrder() {
        return order;
    }

    public T getObject() {
        return object;
    }
}

我开发了一个Set实现,用于存储OrderedObject<T>个实例,并希望按照内置顺序执行的顺序生成Iterator<T>枚举:

public class OrderedObjectSet<T> extends AbstractSet<T> implements Set<T> {
    Set<OrderedObject<T>> s = new HashSet<OrderedObject<T>>();

    public boolean add(int order, T object) {
        return s.add(new OrderedObject<T>(order, object));
    }

    public Iterator<T> iterator() {
        return new OrderedObjectSetIterator<T>();
    }

    public int size() {
        return s.size();
    }

    private class OrderedObjectSetIterator<T> implements Iterator<T> {
        private int index;

        public boolean hasNext() {
            return index < s.size();
        }

        public T next() {
            T object = null;

            for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
                OrderedObject<T> o = it.next();
                if (o.getOrder() == index) {
                    object = o.getObject();
                }
            }

            index++;
            return object;
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }
}

后一个类没有编译,因为在Iterator初始化

中似乎存在一些类型的混淆
for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {

我忽略了什么?

1 个答案:

答案 0 :(得分:5)

混淆是因为内部类OrderedObjectSetIterator引入了一个与外部类相同的泛型类型(T)。 Eclipse IDE显示警告:

The type parameter T is hiding the type T   

所以我猜你不需要引入另一个参数类型,只需使用外部类定义的相同。

基本上,内部类定义为:

private class OrderedObjectSetIterator implements Iterator<T> {
....

迭代器方法为:

public Iterator<T> iterator() {
    return new OrderedObjectSetIterator();
}