2015-05-19 113 views
2
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],我得到的错误:类型不匹配:不能从项目转换项目,但我无法弄清楚什么是错的。有人可以告诉吗?谢谢!类型不匹配:不能从项目转换为项目

回答

3

你的内部类RQIterator被声明新类型参数Item即从类型参数Item其包围类RandomizedQueue被声明不同。

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

private class RQIterator implements Iterator<Item> { 

另外在iterator()中创建迭代器也不需要type参数。

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

奥克,有道理。为什么静态嵌套类应该有不同的表现? – ion20

+0

在类上声明的类型参数只在类的非静态成员的作用域中。请注意,可以将'Item'声明为'static'嵌套类的泛型类型参数,但是您将无法访问'RandomizedQueue'中的非'static'实例变量。 – rgettman

相关问题