如何使集合在Java中只读?
专用于集合的java.util包方法的Collections类,这些方法提供了涉及多态算法的各种附加操作。
此类提供unmodifiable()
方法的不同变体,如下所示-
此方法接受任何集合对象,并返回指定集合的不可修改视图。
此方法接受List接口的对象,并返回其不可修改的视图。
此方法接受Map接口的对象并返回其不可修改的视图。
此方法接受Set接口的对象并返回其不可修改的视图。
此方法接受SortedMap接口的对象,并返回该对象的不可修改视图。
此方法接受SortedSet接口的对象,并返回指定排序集的不可修改视图。
通过使用关于集合的方法之一,可以使集合对象为只读。
示例
以下Java程序创建一个ArrayList对象,向其中添加元素,然后将其转换为只读List对象。
import java.util.Collection; import java.util.Collections; import java.util.Vector; public class CollectionReadOnly { public static void main(String[] args) { //实例化ArrayList对象 Vector<String> vector = new Vector<String>(); vector.add("JavaFx"); vector.add("Java"); vector.add("WebGL"); vector.add("OpenCV"); System.out.println(vector); Collection<String> immutableVector = Collections.unmodifiableCollection(vector); System.out.println("Vector converted to read only "+immutableVector); immutableVector.add("CoffeeScript"); } }
例外
[JavaFx, Java, WebGL, OpenCV] Array list converted to read only [JavaFx, Java, WebGL, OpenCV] Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Unknown Source) at September19.CollectionReadOnly.main(CollectionReadOnly.java:20)
检索List对象的只读视图后,您将无法修改其内容,即,不能直接或使用Iterator对象从其中添加或删除元素,如果这样做,则会引发UnsupportedOperationException。