我正在尝试创建一个迭代器的迭代器,支持Java中的任何类型。目的是迭代迭代器的对象。
但是我的类型不匹配,并且我不知道如何初始化我的实现。
我想到的第一个想法是让我的类实现 Iterator<Iterator<T>>
但这不起作用,因为下一个方法将具有签名 public Iterator<T> next()
这与我想做的不符。而不是返回 Iterator<T>
,我想返回类型 T
.
所以我创建了另一个与 Iterator 接口(interface)非常相似的接口(interface):
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 接口(interface),因此这就是为什么它不是一个好的替代品。我的问题是我不知道怎么办
最佳答案
这行不通,
public interface MyIterator<T extends Iterator<T>>
这意味着 T
必须是Iterator
本身。
您不希望 T 被限制为特定类型,
public interface MyIterator<T>
但是您希望迭代器的类型为 Iterator<T>
public class IteratorOfIterator<T> implements Iterator<T> {
private Iterator<T>[] iterators;
private Iterator<T> currentIterator;
private int currentIndex;
public IteratorOfIterator(Iterator<T>[] iterators){
this.iterators = iterators;
this.currentIndex = 0;
this.currentIterator = iterators[currentIndex];
}
这样你就可以使用Iterator
而不是MyIterator
再次。
关于java - 迭代器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297452/