[英]Accessor methods for Collections in Java
给定一个通用类:
class MyClass (
private List l = new LinkedList <String>();
public void addElement (String s) (l.add (s);)
.............
)
一个访问器方法,允许我按原样迭代列表?
我已经决定实现一个直接返回迭代器的方法,但似乎不正确,因为它可以使用remove()从外部更改列表。
你怎么看?
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>
最常见的方法是实现Iterable
接口,但由于您不想公开remove
方法,您可以遵循NamshubWriter的建议或提供get(index)
和size()
方法的实现 (假设您的类应该像List
一样运行) )。 这将允许基于索引的迭代。
不过这样的事情还可以吗?
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();
}
}
}
需要一个方法让我只是浏览集合元素并保留封装,方法不可修改......我知道但我不能使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.