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

标签 java generics iterator

我有一个通用类,它捆绑了一个对象和一个订单:

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

我忽略了什么?

最佳答案

混淆是因为内部类 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();
}

关于java - 具有类型混淆的自定义 Java 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290611/

相关文章:

java - 无法锁定未保存的 transient 实例

android - 我用于 Retrofit 接口(interface)创建的通用函数出现编译器错误 : inferred type is Class<T>?,但需要 Class<T!>

c++ - 从 C++17 中的迭代器范围复制分配给元组

generics - 将 NUnit 与通用可区分联合结合使用

java - 数组列表 <? super Number> 和 Double

python - 获取非常大的 memmap 中满足条件的下一个元素的索引

iterator - 解决扩展特征的局限性

java - log4j %u{RANDOM} 的 logback 等价物是什么

java - 无法从资源中获取图像

java - 服务层的单元测试 CRUD 方法出现意外结果