Java中不可修改的向量

Nar*_*gis 4 java

我需要在我的程序中管理数据,其中 Java-Vector 适合同步的目的,通过索引提供动态大小和快速随机访问。

但我想让我的向量对其他程序类只读,而对我自己的类进行读写。

我读过Collections.unmodifiableList(),但如果我使我的Vector不可修改,它也将成为我班级的只读。

我怎么解决这个问题?

Ste*_*n C 5

我读过关于Collections.unmodifiableList(),但如果我使我的 Vector 不可修改,它也将成为我班级的只读。

我认为您误解了该方法的作用。实际上,它为现有列表创建了一个不可修改的包装器,而使原始列表可修改。

所以处理你的要求的方法是做这样的事情1

private Vector<?> myVector = new Vector<?>();
private List<?> readOnly = Collections.Collections.unmodifiableList((myVector);

public List<?> getList() { return readOnly; }
Run Code Online (Sandbox Code Playgroud)

任何有权访问的东西myVector仍然可以从中添加和删除元素。更改将通过readonly对象可见……但对该对象的“更改”操作将不起作用。

(另一种方法是创建原始Vector对象的副本,但我很确定这不符合您的要求。)


1 - 请注意,readOnly对象是 aList但不是 a Vector。这应该不是问题,除非您错误地将 getter 声明为返回 a Vector。如果您已经这样做了,并且无法纠正错误,那么您将需要按照VectorEvgeniy Dorofeev 的答案创建自己的子类。否则Collections.unmodifiableList(...)会做得很好。