java.util.Collections ক্লাসের unmodifiableList() মেথড একটি List ইন্টারফেস অবজেক্ট গ্রহণ করে এর একটি অনমোডিফাইবল (Unmodifiable/Read-only) ভিউ রিটার্ন করে। এই ভিউতে শুধু পড়ার অ্যাক্সেস থাকে, লেখার বা পরিবর্তনের নয়।
উদাহরণ: ArrayList কে রিড-অনলি করা
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListReadOnly {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("JavaFx");
list.add("Java");
list.add("WebGL");
list.add("OpenCV");
System.out.println("Original: " + list);
// ArrayList কে রিড-অনলি লিস্টে রূপান্তর
List<String> myList = Collections.unmodifiableList(list);
System.out.println("Read-only view: " + myList);
}
}
আউটপুট
Original: [JavaFx, Java, WebGL, OpenCV] Read-only view: [JavaFx, Java, WebGL, OpenCV]
মডিফাই করার চেষ্টা করলে রানটাইম এক্সেপশন
// ... previous code ...
myList.add("CoffeeScript"); // UnsupportedOperationException ফেলবে
System.out.println("Read-only view: " + myList);
এক্সেপশন
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
at ArrayListReadOnly.main(ArrayListReadOnly.java:20)
গুরুত্বপূর্ণ পয়েন্ট:
- এটি মূল লিস্টের একটি ভিউ (View), কপি নয়। মূল লিস্ট মডিফাই করলে ভিউতে প্রতিফলিত হবে।
- ইটারেটর দিয়েও মডিফাই করা যায় না (
iterator.remove()করলেও এক্সেপশন)। - Java 10+ এ
List.copyOf(list)ব্যবহার করে আসলেই ইমিউটেবল কপি তৈরি করা যায় (ভিউ নয়, স্বতন্ত্র কপি)।