如何在 Java 中将 ArrayList 设为只读?
javaobject oriented programmingprogramming更新于 2024/6/30 2:20:00
java.util.Collections 类的 unmodifiableList() 方法接受 List 接口的对象(实现其类的对象)并返回给定对象的不可修改形式。用户对获取的列表只有只读访问权限。
示例
以下 Java 程序创建一个 ArrayList 对象,向其中添加元素,将其转换为只读 List 对象。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListReadOnly { public static void main(String[] args) { //实例化 ArrayList 对象 ArrayList<String> list = new ArrayList<String>(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); //将 ArrayList 转换为只读列表 List<String> myList = (List<String>) Collections.unmodifiableList(list); System.out.println("数组列表转换为只读"+list); } }
输出
[JavaFx、Java、WebGL、OpenCV] 数组列表转换为只读 [JavaFx、Java、WebGL、OpenCV]
一旦您检索了 List 对象的只读视图,您就无法修改其内容,即您无法直接或使用 Iterator 对象添加或删除其中的元素,如果这样做,将引发 UnsupportedOperationException。
示例
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListReadOnly { public static void main(String[] args) { //实例化 ArrayList 对象 ArrayList<String> list = new ArrayList<String>(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); //将 ArrayList 转换为只读列表 List<String> myList = (List<String>) Collections.unmodifiableList(list); myList.add("CoffeeScript"); System.out.println("数组列表已转换为只读"+myList); } }
运行时异常
[JavaFx, Java, WebGL, OpenCV] Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Unknown Source) at SEPTEMBER.remaining.ArrayListReadOnly.main(ArrayListReadOnly.java:20)