Collections类
Collections.unmodifiableCollection/List/Set/Map(Collection c)
返回一个内部类UnmodifiableCollection(此时无法进行下转型,内部类的变量c才是真实的引用,使用相关方法unmodifiableCollection/List/Set/Map)
final Collection<? extends E> c; //c为控制的集合,内部类的所有方法都使用c的相同方法
public boolean add(E e) { //add和remove方法直接抛出异常
throw new UnsupportedOperationException();
}
public boolean remove(Object o) {
throw new UnsupportedOperationException();
}
使用例子
abstract class Individual {
int a;
public Individual() {
}
public Individual(int a) {
this.a = a;
}
@Override
public String toString() {
return "Individual{" +
"a=" + a +
'}';
}
}
class Student extends Individual {
public Student(int a) {
super(a);
}
}
class Teacher extends Individual {
public Teacher(int a) {
super(a);
}
}
public class Mytest {
public static void main(String args[]) {
ArrayList list = new ArrayList();
list.add(new Student(1));
list.add(new Teacher(2));
List readOnly = Collections.unmodifiableList(list);
list.forEach(str -> System.out.println(str.toString()));
// readOnly.add(new Student(3));//无法添加
// readOnly.sort((c1, c2) -> {//无法排序
// return Teacher.class.isInstance(c1) ? -1 : 1;
// });
readOnly.forEach(str -> System.out.println(str.toString()));
}
}