Я пытаюсь создать итератор итератора, поддерживающий любой тип Java. Цель состоит в том, чтобы перебирать объекты итераторов.Итератор Итератора
Но у меня есть несоответствие типа, и я не вижу, как инициализировать мою реализацию.
Первой идеей, которую я имел в виду, является создание моего класса Iterator<Iterator<T>>
, но это не сработает, потому что следующий метод будет иметь подпись public Iterator<T> next()
, которая не соответствует тому, что я хочу сделать. Вместо того, чтобы возвращать Iterator<T>
, я хочу вернуть тип 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, поэтому он не является хорошей заменой. Моя проблема, я не знаю, как можно
Хорошо, я собираюсь проверить это – Dimitri