我需要在我的程序中管理数据,其中 Java-Vector 适合此目的,因为它是同步的,通过索引提供动态大小和快速随机访问。
但我想将我的 Vector 设为只读,供其他程序类使用,而我自己的类可以读写。
我阅读了关于 Collections.unmodifiableList()
的内容,但是如果我让我的 Vector
不可修改,它也会对我的类(class)变成只读的。
我该如何解决这个问题?
最佳答案
I read about
Collections.unmodifiableList()
, but if I make my Vector unmodifiable, it will become read-only to my class as well.
我认为您误解了该方法的作用。实际上,它为现有列表创建了一个不可修改的包装器,而使原始列表可修改。
所以处理您的要求的方法是做这样的事情1:
private Vector<?> myVector = new Vector<?>();
private List<?> readOnly = Collections.Collections.unmodifiableList((myVector);
public List<?> getList() { return readOnly; }
任何有权访问 myVector
的对象仍然可以在其中添加和删除元素。更改将通过 readonly
对象可见...但是对该对象的“更改”操作将不起作用。
(另一种方法是创建原始 Vector
对象的副本,但我很确定这不符合您的要求。)
1 - 请注意,readOnly
对象是一个 List
而不是 Vector
。这应该不是问题,除非您错误地将 getter 声明为返回 Vector
。如果你已经这样做了,但你无法纠正错误,那么你将需要根据 Evgeniy Dorofeev 的回答创建你自己的 Vector
子类。否则 Collections.unmodifiableList(...)
就可以了。
关于java - Java 中不可修改的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13945911/