Java 9在集合API中引入了新的工厂方法,使开发人员更容易创建不可变的集合。
在本文中,我将首先解释包含新工厂方法的动机,然后介绍所有方法、它们的用法和实现细节。
告诉我,如何用Java 8或更少的初始键值对创建不可变的Map?
但这太冗长了,不是吗?我们能做点别的吗?
其实你还有一个选择。您可以使用双大括号初始化语法来初始化不可变的Map,如下所示:
这有点冗长,但代价很高。双大括号技术的工作方式是创建一个匿名内部类,并提供一个实例初始化器块,该块调用上述所有put()语句。
因此,每次以这种方式创建映射时,您都要创建一个不可重用的匿名类,其对象引用由ClassLoader保存。这可能会导致内存泄漏和序列化问题。
您可以阅读更多关于双支撑技术及其问题的这里和这里。
因此,最好避免双支撑技术。最后,我们有一个唯一的选择,就是创建一个空的映射,然后一个一个地添加键值对。
现在,将Java创建和初始化Map的方式与Scala版本进行比较:
Kotlin版本:
您可以看到在Scala和Kotlin等语言中创建和初始化不可变集合是多么容易。
Java确实需要一种不那么冗长的方法来初始化不可变集合,因此Java 9在List、Set和Map接口中引入了静态工厂方法来创建不可变集合。
让我们看看新工厂方法是如何在Java 9中工作的:
不能输入 null 的不可变集合,其中map又一个独特的构造方法:
其中不能有重复值的方法:
新的工厂方法使用起来容易得多。当我们使用不可变的集合时,它们肯定会使我们的生活更轻松。
其实我想说 这大大提升了新人去面试的难度,毕竟java 现在也要很快的加入发版大军,那么多内容,看看下面会怎么样:
原文链接:
https://www.callicoder.com/java-9-immutable-collections-factory-methods/