我正在为第三方 API 提供一些外观类,我需要包装一个迭代器,以便我可以用我自己的外观对象替换迭代的内容。
这是我的外观类的简化版本,它包装了一个名为Item的 API 类
class FacadeItem {
Item item;
FacadeItem(Item item) {
this.item = item;
}
}
API 提供了这种形式的迭代器Iterator<Item>
我需要实现Iterator<FacadeItem>
由 API 的迭代器支持的这种形式的迭代器。
我考虑使用 Guava 库中的ForwardingIterator如下:
class FacadeItemIterator<FacadeItem> extends ForwardingIterator<Item> {
final Iterator<Item> delegate; // backing iterator
FacadeItemIterator(Iterator<Item> delegate) {
this.delegate = delegate;
}
@Override protected Iterator<Item> delegate() {
return delegate;
}
@Override
public FacadeItem next() {
return new FacadeItem(super.next());
}
}
next()
但是编译器不允许Override ,因为它期望返回的类型是Item,而不是FacadeItem