Методы доступа для коллекций в Java - PullRequest
3 голосов
/ 26 июня 2010

Имеется общий класс:

class MyClass (
       private List l = new LinkedList <String>();

       public void addElement (String s) (l.add (s);)
       .............
)

метод доступа, который позволяет перебирать список в порядке?

Я решил реализовать метод, который возвращает итератор напрямую, но не выглядит корректным, поскольку он может изменить список извне с помощью remove ().

Что ты думаешь?

Ответы [ 4 ]

4 голосов
/ 26 июня 2010
import java.util.*;

public Iterator<String> elements() {
  return Collections.unmodifiableList(elements).iterator();
}

Если вы не против разоблачения того факта, что элементы хранятся в виде списка, вы также можете использовать do:

public ListIterator<String> elements() {
  return Collections.unmodifiableList(elements).listIterator();
}

Если вы хотите разрешить вызывающим абонентам использовать синтаксис «foreach», вы можете вернуть Iterable:

public Iterable<String> getElements() {
  return Collections.unmodifiableList(elements);
}

И, опять же, если вы не возражаете разоблачить, что элементы возвращаются в виде списка, это последнее решение может вернуть List<String>

0 голосов
/ 26 июня 2010

нужен метод, который позволяет мне просто просматривать элементы коллекции и сохранять инкапсуляцию, метод неизменяемый ... Я знаю, но не могу его использовать.

0 голосов
/ 26 июня 2010

а вот с такой штукой все будет в порядке?

public Iterator<String> getList(){

    return new Iterator<String>(){
        Iterator<String> i=l.iterator();

        public boolean hasNext() {              
            return i.hasNext();
        }

        public String next() {
            if(!i.hasNext()) throw new NoSuchElementException();

            return i.next();
        }

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


    }
}
0 голосов
/ 26 июня 2010

Наиболее распространенным способом является реализация интерфейса Iterable, но, поскольку вы не хотите предоставлять метод remove, вы можете следовать советам NamshubWriter или предоставить свою реализацию методов get(index) и size() (при условии, что ваш класс должен вести себя как List). Это разрешит итерацию на основе индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...