专用于集合的java.util包方法的Collections类,这些方法提供了涉及多态算法的各种附加操作。
此类提供unmodifiable()
方法的不同变体,如下所示-
序号 | 方法与说明 |
---|---|
1 | 静态<T>集合<T> unmodifiableCollection(Collection <?扩展T> c) 此方法接受任何集合对象,并返回指定集合的不可修改视图。 |
2 | 静态<T> List <T> unmodifiableList(List <?扩展T> list) 此方法接受List接口的对象,并返回其不可修改的视图。 |
3 | 静态<K,V> Map <K,V> unmodifiableMap(Map <?扩展K ,?扩展V> m) 此方法接受Map接口的对象并返回其不可修改的视图。 |
4 | 静态<T> Set <T> unmodifiableSet(Set <?扩展T> s) 此方法接受Set接口的对象并返回其不可修改的视图。 |
5 | 静态<K,V> SortedMap <K,V> unmodifiableSortedMap(SortedMap <K,?extended V> m) 此方法接受SortedMap接口的对象,并返回该对象的不可修改视图。 |
6 | 静态<T> SortedSet <T> unmodifiableSortedSet(SortedSet <T> s) 此方法接受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。