2016-05-09 4 views
1

Aus irgendeinem Grund, dies nicht funktioniertWarum kann ich methodThatReturnsIterator() nicht ausführen? Next(). Length()?

import java.util.*; 

public class SetExample 
    { 
public static void main(String[] args) 
{ 

    System.out.println(set().next().length()); 

} 

public static Iterator set() 
{ 
    List<String> arr = new ArrayList<>(Arrays.asList("one", "fableeblee", "cacao", "pablo", "thelma", "hepatitis")); 
    Iterator<String> itr = arr.iterator(); 
    System.out.println(itr.next().length()); 
    return itr; 
} 
} 

Die eine Linie in Haupt gibt mir ein „nicht Symbol Fehler finden“, aber ein ähnliches Verfahren wie es in der set() Methode funktioniert. Warum ist das? Es funktioniert einwandfrei in main, wenn ich die .length() entferne, aber damit funktioniert es nicht.

Antwort

3

Ihre Methode set einen Rückgabetyp von Iterator hat, nicht Iterator<String>, so, wenn Sie einen Iterator von der Rückkehr des Verfahrens erhalten, kann die Maschine nicht wissen, was in ihm ist, und somit length nicht auf eine allgemeine Object verwendet werden kann.

Um dies zu beheben, fügen Sie Iterator<String> als Rückgabetyp anstelle von Iterator hinzu.

Um zu verdeutlichen, ist dies im Wesentlichen Verkapselung bei der Arbeit. Methoden außerhalb von set wissen nicht, was in ihr passiert, nur dass es eine Iterator zurückgibt.

2

Sie geben einen Raw-Iterator zurück, und die Methode length() ist für ihre Elemente nicht definiert. Ändern Sie Ihre set() Methode, um Iterator<String> zurückzugeben.

Verwandte Themen