3

イテレータ インターフェイスの機能を拡張する方法があるかどうか疑問に思っていました。Iterable インターフェースを実装する Class があるとします (上記の例では、Iterator インターフェースのオーバーライドされた関数の代わりに、myFunction を追加しました)。

public class MyClass implements Iterable{

    @Override
    public Iterator iterator() {
        return new Iterator() {
            @Override
            public boolean hasNext() {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public Tuple next() {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Not supported yet.");
            }
            public void myFunction(){

            }
        };
    }
}

このコードを別の関数に入れると、コンパイル エラー (「シンボルが見つかりません」) が発生し、なぜこれが起こるのか疑問に思っていました。

public void anotherFunction(){
    MyClass a = new MyClass();
    a.iterator().myFunction();
}
4

3 に答える 3

0

あなたはインターフェースmyFunction()に属していないIteratorため、タイプがで宣言されたオブジェクトでは使用できませんIterator

a.iterator().myFunction();
  ^
  Returns an Iterator and therefore gives a compilation error
于 2013-03-13T21:47:48.040 に答える