我正在处理我正在处理的项目的问题。需要做的事情之一是创建一个检查器,它返回一个实现接口的迭代器,同时使用匿名类。上下文是一个文件系统,基本上,迭代器只需要返回迭代器工作的目录内容。所以这是我目前获得的代码:
目录类:
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类型,但因为它是一个接口,我不能给它任何类型。
有人想知道如何解决这个问题吗?
提前致谢
答案 0 :(得分:0)
解决此问题的一种方法是让DirectoryIterator
扩展Iterator<DiskItem>
像这样:
interface DirectoryIterator extend Iterator<DiskItem> {
...
}
这种方式DirectoryIterator
是Iterator<DiskItem>
的子类,所以使用多态,我们可以将DirectoryIterator
作为Iterator<DiskItem>
希望这会有所帮助,如果这不能解决您的问题,请务必发表评论。