Ошибка при параметризации внешнего и вложенного класса

Столкнулся с ошибкой при параметризации внешнего класс 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();
            }  
        }

    }
}

Ответы (0 шт):