将匿名 class 中的接口实现为迭代器:类型问题

Implementing an interface in an anonymous class as an iterator: type issue

我正在处理的项目有问题。需要做的一件事是创建一个检查器,它 return 是一个实现接口的迭代器,同时使用匿名 class。上下文是一个文件系统,基本上,迭代器只需要 return 迭代器工作目录的内容。所以这是我现在得到的代码:

目录class:

public class Directory {

   ...

    public Iterator<DiskItem> iterator() {
       return new DirectoryIterator() {

            int cursor = 1;
            int end = Directory.this.getNbItems();

            public boolean hasNext() {
                return this.cursor < end;
            }

            public DiskItem next(){
                if(this.hasNext()) {
                    Directory.this.getItemAt(this.cursor++);
                }
                else
                    throw new NoSuchElementException();
            }

            @Override
            public int getNbRemainingItems() {
                return this.end - this.cursor;
            }

            @Override
            public DiskItem getCurrentItem() throws IndexOutOfBoundsException {
                return Directory.this.getItemAt(this.cursor);
            }

            @Override
            public void advance() {
                if(this.hasNext()) {
                    this.cursor++;
                }
                else
                    throw new NoSuchElementException();                 
            }

            @Override
            public void reset() {
                this.cursor = 1;            
            }
        }
}

DirectoryIterator 接口:

public interface DirectoryIterator {

    int getNbRemainingItems();

    DiskItem getCurrentItem() throws IndexOutOfBoundsException;

    void advance();

    void reset();


}

我遇到的问题是出现错误

Type mismatch: cannot convert from new DirectoryIterator(){} to Iterator<DiskItem>

这可能是因为 DirectoryIterator 没有 Iterator 类型,但因为它是一个接口,所以我不能给它任何类型。

有人知道如何解决这个问题吗?

提前致谢

解决此问题的一种方法是使 DirectoryIterator 扩展 Iterator<DiskItem>

像这样:

interface DirectoryIterator extend Iterator<DiskItem> {
    ...
}

这样 DirectoryIteratorIterator<DiskItem> 的子类,所以使用多态性我们可以 return 一个 DirectoryIterator 作为一个 Iterator<DiskItem>

希望这对您有所帮助,如果这不能解决您的问题,请务必发表评论。