unmodifiableList () phương thức của java.util.Collections lớp chấp nhận một đối tượng của giao diện Danh sách (đối tượng thực hiện lớp của nó) và trả về một dạng không thể thay đổi của đối tượng đã cho. Người dùng chỉ có quyền truy cập chỉ đọc vào danh sách thu được.
Ví dụ
Chương trình Java sau tạo một đối tượng ArrayList, thêm các phần tử vào nó, chuyển đổi nó thành một đối tượng List chỉ đọc.
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListReadOnly { public static void main(String[] args) { //Instantiating an ArrayList object ArrayList<String> list = new ArrayList<String>(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); //Converting the ArrayList to read only list List<String> myList = (List<String>) Collections.unmodifiableList(list); System.out.println("Array list converted to read only "+list); } }
Đầu ra
[JavaFx, Java, WebGL, OpenCV] Array list converted to read only [JavaFx, Java, WebGL, OpenCV]
Khi bạn đã truy xuất chế độ xem chỉ đọc của đối tượng Danh sách, bạn không thể sửa đổi nội dung của nó, tức là bạn không thể thêm hoặc xóa các phần tử khỏi nó trực tiếp hoặc sử dụng đối tượng Iterator, nếu bạn làm như vậy thì UnsupportedOperationException sẽ được nâng lên.
Ví dụ
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListReadOnly { public static void main(String[] args) { //Instantiating an ArrayList object ArrayList<String> list = new ArrayList<String>(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); //Converting the ArrayList to read only list List<String> myList = (List<String>) Collections.unmodifiableList(list); myList.add("CoffeeScript"); System.out.println("Array list converted to read only "+myList); } }
Ngoại lệ thời gian chạy
[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)