2016-05-09 3 views
1

何らかの理由で、これはメインの1行が私に「見つけることができないシンボルエラー」を与えるmethodThatReturnsIterator()。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; 
} 
} 

動作しませんが、セットでのそれと類似の方法は、()メソッドは動作します。どうしてこれなの? .length()を削除すると、メインで完全に正常に動作しますが、それで動作しません。 Iterator、ないIterator<String>の戻り値の型を持っているので、あなたがメソッドの戻り値からIteratorを受信したとき、マシンはそれの内側にあるかを知ることができないので、lengthは一般Object上で使用することはできませんset

答えて

3

あなたの方法。

これを修正するには、Iteratorではなく戻り値の型としてIterator<String>を追加します。

明確にするために、これは本質的に仕事場でのカプセル化です。 setの外側にあるメソッドは、内部で何が起こっているのかわからず、Iteratorを返します。

2

生の反復子が返され、length()メソッドはその要素に対して未定義です。 Iterator<String>を返すようにset()メソッドを変更します。

関連する問題