将匿名 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> {
...
}
这样 DirectoryIterator
是 Iterator<DiskItem>
的子类,所以使用多态性我们可以 return 一个 DirectoryIterator
作为一个 Iterator<DiskItem>
希望这对您有所帮助,如果这不能解决您的问题,请务必发表评论。
我正在处理的项目有问题。需要做的一件事是创建一个检查器,它 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> {
...
}
这样 DirectoryIterator
是 Iterator<DiskItem>
的子类,所以使用多态性我们可以 return 一个 DirectoryIterator
作为一个 Iterator<DiskItem>
希望这对您有所帮助,如果这不能解决您的问题,请务必发表评论。