按照字面意思,unmodifiableList的意思就是不可以修改的,是一个只读的集合,所以对这个List,不能进行添加或删除元素的操作;
因为也是第一次见到这个Collections.unmodifiableList方法,所以学习记录一下;
参考了Leaf_wuji的博客
如下代码,定义了一个Customer类,在对Customer类实例化后,需要对其中的phone属性进行写操作,代码运行正常:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Customer {
private String name;
private List<String> phone;
// 构造方法
public Customer(String name, List<String> phone) {
this.name = name;
this.phone = phone;
}
public void add(String s) {
phone.add(s);
}
public void show() {
System.out.println(phone);
}
}
class test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("520");
Customer customer = new Customer("cherish", list);
customer.show();
customer.add("123");
customer.add("456");
customer.show();
}
}
代码运行结果如下:
如果使用unmodifiableList方法,则在该类中定义的List就只是可读的,不能进行修改操作;如下代码,在构造方法中,我们定义了Customer的属性phone是不可以修改的,那么在测试中,我们对实例化的对象进行add操作,就会报错;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Customer {
private String name;
private List<String> phone;
// 构造方法
public Customer(String name, List<String> phone) {
this.name = name;
this.phone = Collections.unmodifiableList(phone);
}
public void add(String s) {
phone.add(s);
}
public void show() {
System.out.println(phone);
}
public void remove() {
phone.remove(0);
}
}
class test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("520");
Customer customer = new Customer("cherish", list);
customer.show();
customer.remove();
customer.show();
customer.add("123");
customer.add("456");
customer.show();
}
}
报错如下:
通过上述的这个例子,个人感觉是,如果需要保证某一个数据是不能被修改的,是固定的一个值,那么就可以使用Collections.unmodifiableList这个方法,为了保证这个数据只是可读的;
类似的方法还有:Collections.unmodifiableMap、Collections.unmodifiableSet等;
其实感觉用final也是可以的?