2013-06-06 4 views
0

У меня есть код, как показано ниже.java generic array с итератором

public class DefaultIterator<E> implements Iterator<E> { 
private E[] array; 
private int i = 0; 

public DefaultIterator(E[] array) { 
    this.array = array; 
} 

@Override 
public boolean hasNext() { 
    return false; 
} 

@Override 
public E next() { 
    return array[i++]; 
} 

@Override 
public void remove() { 

} 

}

// here is my execution. 
    public Iterator<String> createNewIterator(Iterator<String>... generalIterators) { 
    return new DefaultIterator<Iterator<String>[]>(generalIterators); 
} 

Я получаю ошибку компиляции в коде выполнения. может кто-нибудь объяснить, почему он терпит неудачу и как его исправить?

Спасибо.

+0

Какая ошибка компиляции? Это поможет, если вы можете включить его. –

+0

Конструктор DefaultIterator <Итератор []> (Итератор []) не определен – user826323

+0

Mac, я получаю это. не может конвертировать из DefaultIterator <Итератор > в Итератор user826323

ответ

3

Таким образом, жалоба заключается в том, что ни один из общих типов не совпадает между объявлением поля, объявлением конструктора и объявлением метода.

Вы хотите:

public Iterator<String> createNewIterator(String... generalIterators) { 
    return new DefaultIterator<String>(generalIterators); 
} 
+0

Я хочу 'Итератор ' для типа возврата. – user826323

+0

Тогда второй пример должен работать нормально. –

0

Ваш тип возвращаемого значения является еще один, чем ожидалось! DefaultIterator<Iterator<String>[]> не подходит к Iterator<String>Choose DefaultIterator<Iterator<String>[]> как ваш тип возврата, это должно решить его.