繁体   English   中英

Java中集合的访问器方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM