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/