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