2016-05-14 21 views
2

こんにちは私はリンクリスト(リスト内の値を返します)に自分自身のIteratorを書きたいと思います。コンパイラは、プログラムの他の部分では約Integerを文句はありませんので、私はInteger.valueOf()Integer.valueOf()はIteratorでシンボルを見つけることができません

import java.util.*; 
class List { 
    private Node head; 
    private class IntIterator<Integer> implements Iterator<Integer>{ 
     private Node currentNode; 

    private IntIterator(){ 
     currentNode = head; 
    } 

    @Override 
    public boolean hasNext(){ 
     return currentNode != null; 
    } 

    @Override 
    public Integer next(){ 
     if (!hasNext()) { 
      return Integer.valueOf(-1); //the compiler doesnt like this.. 
     } 
     int val = currentNode.val; 
     currentNode = currentNode.next; 
     return Integer.valueOf(val); //and that! 
    } 

    public IntIterator<Integer> iterator(){ 
     return new IntIterator<Integer>(); 
    } 
} 

を呼び出すときにエラー「のシンボルを見つけることができません」を取得何らかの理由で私は、この問題が発生する可能性がありますかわかりません。

とにかく私はあなたがその問題を手伝ってくれることを願っています!

+0

@Leeコンパイルエラーにスタックトレースはありません。期待を和らげてください。 – EJP

答えて

2

ここでの問題は、タイプパラメータIntegerが可視タイプjava.lang.Integerを隠すことです。あなたが完全にジェネリックを理解していないようだ

private class IntIterator implements Iterator<Integer> 

代わりの

private class IntIterator<Integer> implements Iterator<Integer> 
         ^^^^^^^^^ 

ようにあなたが書く必要があります。私は約themを読むことをお勧めします。

+1

aaah ..私はそれがトリックをしたと思います!ありがとうございました – user3025417

+0

さて、私は今理解しています。私の場合、イテレータの使用は不必要なパフォーマンスオーバーヘッドを追加しますか? – user3025417

+0

@ user3025417私の見解では、 'next'で' hasNext'をチェックする必要はありません(あなたのAPIユーザはそれを行う必要があります) – Andrew

関連する問題