Java 类型不匹配:无法从项转换为项 public类RandomizedQueue实现Iterable{ 私人物品【】s; 私人int N; 公共迭代器迭代器(){ 返回新的RQIterator(); } 私有类RQIterator实现迭代器{ 私人物品[]份; 私人物品; 公共注册会计师(){ 复制=(项[])新对象[N]; for(int i=0,k=0;i

Java 类型不匹配:无法从项转换为项 public类RandomizedQueue实现Iterable{ 私人物品【】s; 私人int N; 公共迭代器迭代器(){ 返回新的RQIterator(); } 私有类RQIterator实现迭代器{ 私人物品[]份; 私人物品; 公共注册会计师(){ 复制=(项[])新对象[N]; for(int i=0,k=0;i,java,generics,compiler-errors,iterator,type-mismatch,Java,Generics,Compiler Errors,Iterator,Type Mismatch,在copy[k++]=s[i]行中,我得到了一个错误:类型不匹配:无法从一个项目转换到另一个项目,但我无法找出问题所在。有人能告诉我吗?谢谢 您的内部类RQIterator正在声明一个新的类型参数Item,它不同于其封闭类RandomizedQueue正在声明的类型参数Item 但是,RandomizedQueue中的Item类型参数仍在作用域内,因为RQIterator作为嵌套类,不是一个静态嵌套类。只需使用随机队列中的项 public class RandomizedQueue<Ite

copy[k++]=s[i]
行中,我得到了一个错误:类型不匹配:无法从一个项目转换到另一个项目,但我无法找出问题所在。有人能告诉我吗?谢谢

您的内部类
RQIterator
正在声明一个新的类型参数
Item
,它不同于其封闭类
RandomizedQueue
正在声明的类型参数
Item

但是,
RandomizedQueue
中的
Item
类型参数仍在作用域内,因为
RQIterator
作为嵌套类,不是一个
静态
嵌套类。只需使用
随机队列
中的

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..
    }
}

哦,有道理。为什么静态嵌套类的行为会有所不同?类上声明的类型参数仅在类的非静态成员的范围内。请注意,可以将
声明为
静态
嵌套类上的泛型类型参数,但是您将无法访问
随机化队列
中的非
静态
实例变量。
private class RQIterator implements Iterator<Item> {
public Iterator<Item> iterator() {
    return new RQIterator();
}