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> {
...
}