Ошибка при параметризации внешнего и вложенного класса
Столкнулся с ошибкой при параметризации внешнего класс MyCollection implements Iterable и вложенного Iterator implements Iterator. Ошибка возникает в методе T next() итератора, при попытке возвратить array[currentIndex], имеющий, как мне казалось, тот же тип Т, что и в сигнатуре метода. Но компилятор требует явно преобразовать Т внешнего класса к (Т) внутреннего. Странно, ведь у объекта внутреннего класса есть ссылка на объект внешнего, и было бы логично предположить, что при создании объекта внешнего типа вложенный будет параметризован тем же типом, что и внешний. Зачем тут явное приведение Т к (Т)?
public class MyCollection<T> implements Iterable<T> {
T[] array;
MyCollection(T[] array) {
this.array = array;
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return null;
}
class MyIterator<T> implements Iterator<T>{
private int currentIndex=0;
@Override
public boolean hasNext() {
if(currentIndex<array.length)return true;
return false;
}
@Override
public T next() {
if(hasNext()) {
return MyCollection.this.array[currentIndex];
}else {
throw new NoSuchElementException();
}
}
}
}