类型不匹配:无法从Item转换为Item

时间:2015-05-19 18:30:40

标签: java generics compiler-errors iterator type-mismatch

public class RandomizedQueue<Item> implements Iterable<Item> {

    private Item[] s;
    private int N;

    public Iterator<Item> iterator() {
        return new RQIterator<Item>();
    }

    private class RQIterator<Item> implements Iterator<Item> {

        private Item[] copy;
        private int newItems;

        public RQIterator() {
            copy = (Item[]) new Object[N];
            for (int i = 0, k = 0; i < s.length; i++) {
                if (s[i] != null)
                    copy[k++] = s[i];
            }
            newItems = N;
        }

        //hasNext(), next(), remove() methods..
    }
}

copy[k++] = s[i]行上,我收到错误:类型不匹配:无法从项目转换为项目,但我无法弄清楚出了什么问题。有人能说出来吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您的内部类RQIterator声明了一个新类型参数Item,该参数与其封闭类Item声明的类型参数RandomizedQueue不同。

但是,Item中的RandomizedQueue类型参数仍在范围内,因为作为嵌套类的RQIterator不是static嵌套类。只需使用Item中的RandomizedQueue

private class RQIterator implements Iterator<Item> {

iterator()中创建迭代器也不需要类型参数。

public Iterator<Item> iterator() {
    return new RQIterator();
}
相关问题