2015-05-19 110 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

相關問題