给出一个通用类:
class MyClass (
private List l = new LinkedList <String>();
public void addElement (String s) (l.add (s);)
.............
)
一个访问器方法,允许我按原样迭代列表?
我决定实现一个直接返回迭代器的方法,但似乎不正确,因为它可以使用remove()从外部更改列表。
您怎么看?
答案 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)
需要一个方法让我只是浏览集合元素并保留封装,方法不可修改......我知道但我不能使用它。