Java 在匿名类中作为迭代器实现接口:类型问题

Java 在匿名类中作为迭代器实现接口:类型问题,java,interface,iterator,anonymous-class,Java,Interface,Iterator,Anonymous Class,我对我正在做的一个项目有意见。需要做的事情之一是创建一个检查器,它返回一个实现接口的迭代器,同时使用一个匿名类。上下文是一个文件系统,基本上,迭代器只需要返回迭代器工作的目录的内容。这是我目前得到的代码: 目录类: public class Directory { ... public Iterator<DiskItem> iterator() { return new DirectoryIterator() { int cu

我对我正在做的一个项目有意见。需要做的事情之一是创建一个检查器,它返回一个实现接口的迭代器,同时使用一个匿名类。上下文是一个文件系统,基本上,迭代器只需要返回迭代器工作的目录的内容。这是我目前得到的代码:

目录类:

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;            
            }
        }
}
我遇到的问题是错误

Type mismatch: cannot convert from new DirectoryIterator(){} to Iterator<DiskItem>
类型不匹配:无法从新的DirectoryIterator(){}转换为迭代器
这可能是因为DirectoryIterator没有类型Iterator,但是因为它是一个接口,我不能给它任何类型

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


提前感谢

解决此问题的方法是使
DirectoryIterator
扩展
Iterator

像这样:

interface DirectoryIterator extend Iterator<DiskItem> {
    ...
}
接口目录迭代器扩展迭代器{
...
}
这样一来,
directoryinterator
Iterator
的一个子类,因此使用多态性,我们可以将
directoryinterator
作为
迭代器返回


希望这有帮助,如果这不能解决您的问题,请务必留下评论。

您可以使
DirectoryIterator
实现
Iterator
它更多地是从Iterator扩展而来的DirectoryIterator,而不是implements@PurityLake为什么不把这作为一个答案(并修复工具与扩展工具)?@Kayaman Ya,用我的话来说,oops有点失误,有一段时间没有接触java,所以我忘记了实现和扩展谢谢,错误消失了。不过,我确实遇到了另一个问题,在类目录中测试方法迭代器时,我只能调用迭代器类的默认方法,而不能调用我自己的方法(从DirectoryIterator接口实现的方法),例如,如果我创建了一个包含一些文件的目录“parent”,我只能调用next()和remove()这样,但不是GetNbOfReainingItems()…是的,没有想到,返回迭代器有什么原因吗?在论文中,他们明确指出:“您的解决方案应该包括一个检查器,该检查器提供浏览目录直接内容的能力。此检查器应返回一个迭代器,该迭代器实现接口DirectoryIterator。使用匿名类。”解决了这个问题,我将行“public Iterator Iterator(){”改为“public directoryierator Iterator(){”,现在我所有的函数都可以工作了!这实际上是我关于stackoverflow的第一个问题,我很惊讶我得到的响应如此之快!谢谢你的帮助:)
interface DirectoryIterator extend Iterator<DiskItem> {
    ...
}