Java の任意の型をサポートするイテレータのイテレータを作成しようとしています。目的は、反復子のオブジェクトを反復処理することです。
しかし、型の不一致があり、実装を初期化する方法がわかりません。
私が念頭に置いていた最初のアイデアは、クラスを実装するIterator<Iterator<T>>
ことでしたが、次のメソッドにはpublic Iterator<T> next()
私がやりたいことに対応しない署名があるため、これは機能しません。を返す代わりにIterator<T>
、型を返したいです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: 私は問題を完全に理解しています。たとえば、型 String は MyIterator インターフェイスを実装していないことを理解しています。これが、適切な代替ではない理由です。私の問題は、どうすればいいのかわからないことです