2016-05-14 8 views
2

Hallo Ich möchte meine eigene Iterator über eine verkettete Liste schreiben (die die Werte in der Liste zurückgibt). Aus irgendeinem Grund bekomme ich einen Fehler „kann nicht Symbol finden“, wenn Integer.valueOf()Integer.valueOf() kann kein Symbol in Iterator finden

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>(); 
    } 
} 

Aufruf Ich weiß nicht, wie dieses Problem passieren kann, da der Compiler nicht über Integer in den anderen Teilen des Programms nicht beschweren.

Wie auch immer ich hoffe, Sie können mir mit diesem Problem helfen!

+0

@Lee Compilation-Fehler haben keine Stack-Traces. Bitte moderiere deine Erwartungen. – EJP

Antwort

2

Das Problem hier ist, dass der Typ Parameter Integer sichtbaren Typ java.lang.Integer verbirgt. Sie sollten schreiben wie

private class IntIterator implements Iterator<Integer> 

statt

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

Es scheint, Sie verstehen nicht vollständig Generika. Ich schlage vor, dass Sie über them lesen.

+1

aaah .. Ich denke, das hat den Trick! Danke – user3025417

+0

Ok ich verstehe jetzt. Stellt der Einsatz des Iterators in meinem Fall unnötigen Performance-Overhead dar? – user3025417

+0

@ user3025417, aus meiner Sicht müssen Sie 'hasNext' in' next' nicht überprüfen (Ihr API-Benutzer muss es tun) – Andrew