是否可以在Java中扩展迭代器的功能?

pap*_*nis 3 java iterator

我想知道是否有一种方法来扩展迭代器接口的功能.假设我们有一个实现Iterable接口的Class(在上面的例子中,我没有添加myFunction的Iterator接口的重写函数).

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(){

            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我把这个代码放在另一个函数中,我会得到编译错误("找不到符号"),我想知道为什么会这样.

public void anotherFunction(){
    MyClass a = new MyClass();
    a.iterator().myFunction();
}
Run Code Online (Sandbox Code Playgroud)

kan*_*kan 10

当然是.您可以创建另一个界面:

interface MyBetterIterator extends Iterator
{
    void myFunction();
}
Run Code Online (Sandbox Code Playgroud)

然后让方法返回你的类型:

public class MyClass implements Iterable{

    @Override
    public MyBetterIterator iterator() {
...
    }
}
Run Code Online (Sandbox Code Playgroud)

该功能称为"返回类型协方差",在Java 5中引入.