我想将 Iterator 子类化为我称之为 FooIterator 的东西。我的代码看起来像这样:
public class FooIterator<E> implements Iterator<E> {
public FooIterator(Collection<Bar> bars) {
innerIterator = bars.iterator();
}
@Override
public boolean hasNext() {
return innerIterator.hasNext();
}
@SuppressWarnings("unchecked")
@Override
public E next() {
Bar bar = innerIterator.next();
return new E(bar);
}
@Override
public void remove() {
throw new UnsupportedOperationException("Don't remove from FooIterator!");
}
private Iterator<Bar> innerIterator;
}
...除了,当然,这不起作用,因为我不能从 Bar 实例化一个新的 E。
我只会将它与具有带 Bar 的构造函数的 E 一起使用。有什么方法可以向编译器“证明”这一点,或者如果 E 没有适当的构造函数则只抛出运行时错误?
或者也许我只是没有在这里使用正确的设计模式?我最近一直在做很多 C++,我觉得我可能以错误的方式处理这个问题。