java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...
java 方法 示例
大家好,這是我在該博客上發(fā)表的有關(guān)Java 9功能的第一篇文章,今天您將了解我最喜歡的功能“收集的工廠方法” ,它是JEP 269的一部分。JEP代表JDK增強(qiáng)建議。 如果您曾經(jīng)在Groovy或Kotlin工作過(guò),那么您就會(huì)知道使用集合文字使用元素創(chuàng)建列表是多么容易,例如,創(chuàng)建1,2,3列表,您只需編寫(xiě)val items = listOf(1, 2, 3) 。 不幸的是,Java尚不支持Java,但是JDK 9中的工廠收集方法已經(jīng)改善了一切,幾乎就像那樣。 JDK在基本的Collection接口上添加了諸如of()類(lèi)of() 靜態(tài)工廠方法 ,您可以使用它們來(lái)創(chuàng)建項(xiàng)目列表。
盡管Project Jigsaw或Java Module系統(tǒng)是Java 9發(fā)行版的主要亮點(diǎn),但是從開(kāi)發(fā)的角度來(lái)看,還有其他一些有用的功能更有用,例如流程API附魔,Stream API增強(qiáng)以及Optional類(lèi)的一些有用方法,但是我最喜歡的API更改是Collection的工廠方法。
就像在Kotlin , Scala或Groovy中一樣,它使您可以在一行中創(chuàng)建值的列表,集合和值的映射:
List<String> list = List.of("Java", "Kotlin", "Groovy");但是,唯一要注意的是,您可以創(chuàng)建不可修改或不可變的 List,Set或Map。
of()靜態(tài)工廠方法返回的List,Set或Map在結(jié)構(gòu)上是不可變的,這意味著一旦添加,就不能添加,刪除或更改元素。
調(diào)用任何mutator方法都將始終引發(fā)UnsupportedOperationException 。 但是,如果所包含的元素本身是可變的,則可能導(dǎo)致Collection的行為不一致或它的內(nèi)容似乎發(fā)生變化。
這與您在JDK 6或7中創(chuàng)建的不可修改列表相同,如下所示:
List<String> listOfString = new List<>(); listOfString.add("Java"); listOfString.add("Kotlin"); listOfString.add("Groovy"); listOfString.add("Scala"); listOfString = Collections.unmodifiableList(listOfString);unmodifiableList()方法返回的列表也不支持添加,刪除或設(shè)置操作,如果調(diào)用它們,則拋出UnsupportedOperationException 。
兩種代碼之間的唯一區(qū)別是,更早的代碼需要6行以上的代碼才能創(chuàng)建不可變的Collection,例如不可變的List,Set或Map,但是現(xiàn)在您只需一行即可。
List接口上還有List.of()多個(gè)重載版本,例如,允許您創(chuàng)建1到10個(gè)元素的不可變列表,以及允許您創(chuàng)建任意數(shù)量的元素列表的可變參數(shù)方法 。
Set.of( )和Map.of()方法也是如此。 這是在Java 9中創(chuàng)建不可變Set的示例:
Set<Integer> primes = Set.of(2,3,5,7);您會(huì)看到僅一行就可以創(chuàng)建一個(gè)不可變的Set。 同樣,要?jiǎng)?chuàng)建不可變Map,JDK 9提供了兩種方法Map.of(K k1, V v1)和Map.ofEntries()通過(guò)使用這兩種方法,您可以創(chuàng)建不可變條目的Map,例如
此方法已重載以創(chuàng)建最多10個(gè)鍵值對(duì)的映射,但是如果您需要更大的映射和更多映射,則應(yīng)使用Map.ofEntries()方法。
順便說(shuō)一句,您知道如何實(shí)現(xiàn)此功能嗎? 為何以前不可用? 如果查看JDK 9代碼或Javadoc,則會(huì)發(fā)現(xiàn)通過(guò)在Java Collection框架的關(guān)鍵接口(例如List,Set和Map)上添加靜態(tài)工廠方法來(lái)實(shí)現(xiàn)此功能。
在JDK 8之前這是不可能的,因?yàn)樵诮涌谏咸砑臃椒ㄒ馕吨茐乃锌蛻?hù)端,并且接口上不允許使用靜態(tài)方法。 在Java 8上,事情發(fā)生了變化,在接口上引入了默認(rèn) 方法和靜態(tài)方法 ,這為評(píng)估JDK API鋪平了道路。
我希望將來(lái)會(huì)有更多類(lèi)似的約定,使使用JDK API更加容易。
同樣,使用這些工廠方法時(shí),適用于使用不同集合的規(guī)則也將適用(正如您期望的那樣)。 因此,創(chuàng)建Set時(shí)不能傳遞重復(fù)元素,因?yàn)镾et不允許重復(fù) 。
同樣,創(chuàng)建Map時(shí)不能傳遞重復(fù)鍵,因?yàn)镸ap不允許重復(fù)鍵。 如果這樣做,則將IllegalArgumentException
另外,您不能將null值傳遞給collection factory方法,如果這樣做,請(qǐng)為Java異常NullPointerException做好準(zhǔn)備。
這就是如何在Java 9中創(chuàng)建不可變的列表,設(shè)置和映射的全部?jī)?nèi)容。 集合上的靜態(tài)方法確實(shí)使使用Java集合API變得更容易,至少現(xiàn)在它類(lèi)似于Kotlin或Groovy提供的東西。 JDK 9充滿(mǎn)了這樣有用的功能,請(qǐng)繼續(xù)關(guān)注此博客上的更多此類(lèi)文章。
您可能喜歡的其他Java和編程文章
- Java開(kāi)發(fā)人員在2018年應(yīng)該學(xué)習(xí)的10件事
- 20個(gè)Java開(kāi)發(fā)人員必備庫(kù)
- Java程序員可以在2018年閱讀的20本書(shū)
- 十大Java 9教程和課程–最好的
- 5個(gè)免費(fèi)的Spring和Spring啟動(dòng)在線(xiàn)學(xué)習(xí)課程
- Java和Web開(kāi)發(fā)人員的10個(gè)框架
- 簡(jiǎn)單的Java 9新功能-概述(免費(fèi)課程)
感謝您到目前為止閱讀本文。 如果您喜歡此Java 9功能,請(qǐng)與您的朋友和同事分享。 如果您有任何問(wèn)題需要反饋,請(qǐng)留下注釋。
翻譯自: https://www.javacodegeeks.com/2018/02/java-9-example-factory-methods-collection-creating-unmodifiable-list-set-map.html
java 方法 示例
總結(jié)
以上是生活随笔為你收集整理的java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 买新手机时要注意什么
- 下一篇: java 示例_功能Java示例 第3部