2015-06-05 3 views
0

Привет, я хочу реализовать итератор для класса, который расширяет абстрактную коллекцию.Реализация Итератора для abstractCollection

class Name<E extends Comparable<E>> 
extends AbstractCollection<CompRational> 
implements Iterable<E>{ 
... 
    public Iterator<E> iterator(){ 
    return new NameIterator<E>(this); 
    } 
... 
} 

и Итератор должен выглядеть следующим образом

class NameIterator<E extends Comparable<E>> implements Iterator<E>{ 
    private Name<E> tree; 
    private int pos = 0; 

    public NameIterator (Name<E> t) { 
     ... 
    } 

    @Override 
    public boolean hasNext() { 
     ... 
    } 

    @Override 
    public E next() { 
     ... 
    } 

    @Override 
    public void remove(){ 
     throw new UnsupportedOperationException(); 
    } 
} 

сообщение об ошибке, я получаю то, что мой класс Name не переопределить или реализовать итератор и итератор не может переопределить итератора, так как типы несовместимы и он говорит, что я использую два разных, но где и как и как я могу избавиться от него?

PS: Спасибо за все полезные комментарии, но я идиот, а критическая часть AbstractCollection<CompRational> не была даже частью вопроса. Сэр полностью забыл об этом. Пожалуйста, удалите это, если это возможно.

+0

На самом деле, что вы пытаетесь реализовать 2 «Итераторы»? почему вы хотите, чтобы оба класса выполняли «Итератор»? – Blip

+0

Возможно, вы захотите реализовать Iterable в первом. Не Итератор . – Nytux

+0

Да, sry публичный класс должен быть итерабельным, а не итератором. Но я сделал это в реальном коде. – haxor789

ответ

2

Не имеют Collection орудие Iterator. Это для экземпляра Iterator. Ваша бетонная коллекция должна расширить AbstractCollection, а ваш NameIterator реализует Iterator.

class Name<E extends Comparable<E>> extends AbstractCollection { 

    @Override 
    public NameIterator<E> iterator() { 
     return new NameIterator<>(); 
    } 

    @Override 
    public int size() { 
     return 0; 
    } 
} 

class NameIterator<E extends Comparable<E>> implements Iterator{ 

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

    @Override 
    public E next() { 
     return null; 
    } 
}