如何在 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)

相关文章