java - Java 中不可修改的 vector

标签 java

我需要在我的程序中管理数据,其中 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/

相关文章:

java - 通过java更新sql表中随机行中的值

java - 在将大文件发送到多个客户端的同时提高性能

java - PrintStream 类型中的方法 println(int) 不适用于参数 (String, int, int, int)

java - Eclipse 给出关于不返回整数的错误

java - 将部分字符串转换为要在 if/else 语句中使用的字符

java - twitter4j 4.0.2 getRawJSON() 返回 null

java - Eclipse Java Swing 无法识别的错误

java - 针对一个特定的 JDBC 错误调整 hibernate 日志记录级别

java - 只有一个表达式可以获取昨天的日期和本月的第一天

java - 应用 Array.sort() 函数后数组元素变为 0