我正在尝试创建一个迭代器的迭代器,支持Java中的任何类型。其目的是迭代迭代器的对象。
但是我有一个类型不匹配,我不知道如何初始化我的实现。
我脑海中的第一个想法是让我的类实现Iterator<Iterator<T>>,但这行不通,因为下一个方法将具有签名public Iterator<T> next(),这与我想要做的事情不相符。我希望返回类型T,而不是返回Iterator<T>。
因此,我创建了另一个与Iterator接口非常相似的接口:
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:我完全理解这个问题。我知道,例如,类型字符串没有实现MyIterator接口,所以这就是为什么它不是一个很好的替代品。我的问题是我不知道怎么能
发布于 2013-04-30 18:24:18
这是行不通的
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。
发布于 2013-04-30 18:23:07
您可以使用
Iterator<String> myIterator = Arrays.asList(strings).iterator();没有直接从Java数组获得迭代器的标准方法,因此您可以先将其转换为List,或者为数组构建自己的迭代器。
发布于 2013-04-30 18:38:50
您正在创建迭代器的迭代器,而构造函数定义了迭代器的数组,因此调用代码应该如下所示:
List list1 = new ArrayList();
List list2 = new ArrayList();
Iterator<String> iterator1 = list1.iterator();
Iterator<String> iterator2 = list2.iterator();
Iterator[] iteratorList = {iterator1, iterator2};
MyIterator<String> myIterator = new IteratorOfIterator(iteratorList);https://stackoverflow.com/questions/16297452
复制相似问题