【发布时间】:2016-04-18 10:27:45
【问题描述】:
我正在处理的项目有问题。需要发生的一件事是创建一个检查器,该检查器返回一个实现接口的迭代器,同时使用匿名类。上下文是一个文件系统,基本上,迭代器只需要返回迭代器工作的目录的内容。所以这是我目前得到的代码:
目录类:
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> -
它更像是从 Iterator
扩展 DirectoryIterator 而不是实现 -
@PurityLake 为什么不把这个作为答案(并修复工具与扩展那里)?
-
@Kayaman Ya,哎呀,我的话有点滑倒了,有一段时间没接触过 java,所以它让我对工具和扩展一无所知
标签: java interface iterator anonymous-class