我正在尝试创建一个迭代器的迭代器,支持 Java 中的任何类型。目的是迭代迭代器的对象。
但我有一个类型不匹配,我看不到如何初始化我的实现。
我想到的第一个想法是让我的类实现Iterator<Iterator<T>>
,但这不起作用,因为下一个方法将具有与public Iterator<T> next()
我想要做的不对应的签名。Iterator<T>
我不想返回 of ,而是返回 type T
。
所以我创建了另一个与迭代器接口非常相似的接口:
public interface MyIterator<T extends Iterator<T>> {
public boolean hasNext();
public T next();
}
我的迭代器采用 T 类型,它是一个迭代器。这是我的实现(没有删除):
public class IteratorOfIterator<T extends Iterator<T>> implements MyIterator<T> {
private T[] iterators;
private T currentIterator;
private int currentIndex;
public IteratorOfIterator(T[] iterators){
this.iterators = iterators;
this.currentIndex = 0;
this.currentIterator = iterators[currentIndex];
}
public boolean hasNext() {
return currentIndex < iterators.length - 1 || currentIterator.hasNext();
}
public T next() {
if(!this.currentIterator.hasNext()){
currentIndex++;
this.currentIterator = iterators[currentIndex];
}
return currentIterator.next();
}
如果我想测试我的迭代器但我的类型不匹配,我该如何初始化它?这是我想做的一个例子:
String[] strings = {"peanut","butter","coco","foo","bar"};
Object[] iterators = {strings};
MyIterator<String> myIterator = new IteratorOfIterator<String>(iterators); // <-- in this line
错误说:Bound mismatch: The type String is not a valid substitute for the bounded parameter <T extends Iterator<T>> of the type IteratorOfIterator<T> IteratorOfIterator.java
我怎么解决这个问题?非常感谢您的建议。
PS:我完全理解这个问题。我知道,例如,String 类型没有实现 MyIterator 接口,所以这就是为什么它不是一个好的替代品。我的问题是我不怎么能