java 静态工厂_Java 9静态工厂方法创建不可变集合

Java 9在集合API中引入了新的工厂方法,使开发人员更容易创建不可变的集合。

在本文中,我将首先解释包含新工厂方法的动机,然后介绍所有方法、它们的用法和实现细节。

告诉我,如何用Java 8或更少的初始键值对创建不可变的Map?

668f9fbfc876d03998828ea04f0533ec.png

但这太冗长了,不是吗?我们能做点别的吗?

其实你还有一个选择。您可以使用双大括号初始化语法来初始化不可变的Map,如下所示:

f3b8d9135daf775add4846e68be1a629.png

这有点冗长,但代价很高。双大括号技术的工作方式是创建一个匿名内部类,并提供一个实例初始化器块,该块调用上述所有put()语句。

因此,每次以这种方式创建映射时,您都要创建一个不可重用的匿名类,其对象引用由ClassLoader保存。这可能会导致内存泄漏和序列化问题。

您可以阅读更多关于双支撑技术及其问题的这里和这里。

因此,最好避免双支撑技术。最后,我们有一个唯一的选择,就是创建一个空的映射,然后一个一个地添加键值对。

现在,将Java创建和初始化Map的方式与Scala版本进行比较:

3a7f0aa0d75774ad3a717dcd5c2dc422.png

Kotlin版本:

efa04d4534e3ce0a1a2d6f0fadc9781b.png

您可以看到在Scala和Kotlin等语言中创建和初始化不可变集合是多么容易。

Java确实需要一种不那么冗长的方法来初始化不可变集合,因此Java 9在List、Set和Map接口中引入了静态工厂方法来创建不可变集合。

让我们看看新工厂方法是如何在Java 9中工作的:

3ed76967ed8f21120db6ec5719f15761.png

不能输入 null 的不可变集合,其中map又一个独特的构造方法:

9468d404a6166c04ab0e4ba1606eb528.png

其中不能有重复值的方法:

025e008ac7b8e47100c4d50ad15ab74b.png

新的工厂方法使用起来容易得多。当我们使用不可变的集合时,它们肯定会使我们的生活更轻松。

其实我想说 这大大提升了新人去面试的难度,毕竟java 现在也要很快的加入发版大军,那么多内容,看看下面会怎么样:

a1fd045dc9d74b4807a6b242b681b0d2.png

原文链接:

https://www.callicoder.com/java-9-immutable-collections-factory-methods/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值