Примеры того, как добавить итератор в пользовательский класс в Java 1.4? - PullRequest
2 голосов
/ 12 июня 2009

Может ли кто-нибудь привести пример наилучшего способа добавления итератора в пользовательский класс до итерируемого интерфейса Java 5?

Является ли упаковка коллекции лучшим вариантом? Что-то вроде

public Iterator iterator() {
    return wrappedCollection.iterator();
}

В своем первом посте я перепутал Iterator с Iterable. Конечный результат, который меня интересует, это возможность работать с пользовательским классом следующим образом.

Iterator it = customClass.iterator();
while (it.hasNext()) {
    //do stuff
}

Ответы [ 6 ]

4 голосов
/ 12 июня 2009

Если вы просто упаковываете коллекцию, вы можете использовать метод пересылки.

public class Custom implements Collection {
    Collection c; // create an instance here or in the constructor
    ...

    // forwarding method
    public Iterator iterator()
    {
        return c.iterator();
    }
}

Я думаю, что было бы лучше реализовать любой интерфейс Collection, который вы переносите, вместо Iterator.

4 голосов
/ 12 июня 2009

Вы добавили метод, который выглядит как

public Iterator iterator() {
    return new YourCustomIterator(...);
}

1 голос
/ 12 июня 2009

Я думаю, вы ищете что-то вроде ниже

http://karephul.blogspot.com/2009/05/concurrentmodificationexception.html

и да, идея внутреннего класса - это то, что вы ищете.

1 голос
/ 12 июня 2009

Вы хотите, чтобы в коллекции был метод итератора, который при необходимости возвращает экземпляр частного класса Iterator.

public class IterableTest
{
    public Iterator iterator()
    {
        return new IteratorTest();
    }
    private class IteratorTest implements Iterator
    {
        public boolean hasNext(){...}

        public Object next(){...}

        public void remove(){...}
    }
}
1 голос
/ 12 июня 2009

Если вы просто хотите показать итератор внутренней коллекции, вы просто возвращаете этот итератор коллекций. Если вы хотите сделать больше, вы должны либо обернуть свой собственный пакет, либо проверить пакет Apache Commons Collections, который включает в себя довольно много итераторов, методов и модификаторов. (Даже если вы не можете использовать их методы, их реализации должны многому научить вас при создании итераторов.)

1 голос
/ 12 июня 2009

Похоже, вы только что добавили те методы в ваш класс, который содержит коллекцию. В этом случае ваш объект теперь также является вашим итератором. Вероятно, вы хотели создать новый класс, который реализует Iterator и создается с помощью клона вашей коллекции с помощью метода iterator ().

...