Java中集合的访问器方法

时间:2010-06-26 14:25:13

标签: java

给出一个通用类:

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

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

一个访问器方法,允许我按原样迭代列表?

我决定实现一个直接返回迭代器的方法,但似乎不正确,因为它可以使用remove()从外部更改列表。

您怎么看?

4 个答案:

答案 0 :(得分:4)

import java.util.*;

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

如果您不介意将元素存储为List的事实,您也可以使用do:

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

如果您希望允许调用者使用“foreach”语法,您可能希望返回Iterable:

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

而且,如果您不介意将元素作为List返回,那么最后一个解决方案可能会返回List<String>

答案 1 :(得分:0)

最常见的方法是实现Iterable界面,但由于您不想公开remove方法,您可以按照NamshubWriter的建议或提供{{1}的实施方式}和get(index)方法(假设您的类应该像size()一样)。这将允许基于索引的迭代。

答案 2 :(得分:0)

然而这样的事情会好的吗?

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();              
        }


    }
}

答案 3 :(得分:0)

需要一个方法让我只是浏览集合元素并保留封装,方法不可修改......我知道但我不能使用它。