MR-LI_20200908-李伟江

问题

早上有点迷糊,所以在List.of方法这儿有点模糊。

List.of 所返回的List集合是不可变的

晚上回顾的时候看官方文档

在List.of和 List.copyOf静态工厂方法提供了一种方便的方式来创建不可修改的列表。List 这些方法创建的实例具有以下特征:
  • 它们是不可修改的。元素无法添加,删除或替换。调用List上的任何mutator方法总是会导致UnsupportedOperationException抛出该异常。但是,如果所包含的元素本身是可变的,则可能导致列表的内容似乎发生变化。
  • 他们不允许使用null元素。尝试使用null元素创建它们会 导致NullPointerException

都是List声明的变量,为什么一个可变,一个不可变。

解决过程

代码证明

List<String> name = new ArrayList<>();
List<String> list = List.of();
System.out.println( name.getClass() );
System.out.println( list.getClass() );

输出结果如下

class java.util.ArrayList
class java.util.ImmutableCollections$ListN

所以,虽然都是List声明的变量,但是指向不同的实例。在ArrayList实现类中,有add方法。但是在ImmutableCollections$ListN中没有实现这样的方法。所以不支持添加、删除、替换操作。

同时发现

Set.ofSet.copyOf静态工厂方法提供了一种方便的方法来创建不可修改的集合。

不同的是,Set.ofSet.copyof方法的返回类型是Set类型。

吐槽

哎,人生地不熟,去医院见不到大夫,出租车还绕路。人与人之间最基本的信任呢?