日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
從 Java 9 到 Java 17 之 Java 10

在上一篇我們對Java 9的特性進(jìn)行了一些回顧,今天接著來看看Java 10帶來了什么特性。之所以需要把Java 8 到Java 17的特性歸納一遍,因為Java社區(qū)對Java 17的重視程度前所未有。話不多說,讓我們走進(jìn)Java 10。

Java 10

從Java 10 開始,Java的迭代周期縮短為半年,半年發(fā)布一個版本。

局部變量類型推斷

在Java 6時初始化一個Map需要我們這樣來聲明:

 
 
 
 
  1. Map map = new HashMap(); 

事實上泛型方法的參數(shù)可以通過上下文推導(dǎo)出來,所以在Java 7 中簡化為:

 
 
 
 
  1. Map map = new HashMap<>(); 

到了Java 10 進(jìn)一步升華了類型推斷,我們看一個例子:

 
 
 
 
  1. var map = Map.of("hello","world"); 
  2. String var = map.get("hello"); 

猛一看還以為是Javascript的寫法,事實上這就是Java。編譯器從右側(cè)的初始化程序的類型推斷出初始化類型,這將大量減少一些樣板代碼。不過請注意,此特性僅適用于初始化局部變量,它不能用于成員變量、方法參數(shù)、返回類型等場景中。

另一件要注意的事情是var 并不是Java中的關(guān)鍵字,這確保了Java的向后兼容性。另外使用var沒有運(yùn)行時開銷,也不會使 Java 成為動態(tài)語言。var標(biāo)記的變量的類型仍然是在編譯時推斷出來。

var 不應(yīng)該被濫用

雖然這樣“爽起來了”,但是var也不應(yīng)該被濫用。

下面這種寫法明細(xì)可讀性差,導(dǎo)致變量的類型需要你去DEBUG:

 
 
 
 
  1. var data = someObject.getData(); 

Stream流中也盡量不要使用:

 
 
 
 
  1. // 可讀性差 
  2. var names= apples.stream() 
  3.     .map(Apple::getName) 
  4.     .collect(Collectors.toList()); 

因此,在使用var時應(yīng)該保證必要的可讀性。

另外,在多態(tài)這個重要的Java特性中,var表現(xiàn)的并不是很完美。如果Fruit有Apple和Orange兩種實現(xiàn)。

 
 
 
 
  1. var x = new Apple(); 

如果我們對x重新賦值為new Orange()就會報錯,因為編譯后x的類型就已經(jīng)固定下來了。所以var和泛型一樣都是在編譯過程中起了作用。你必須保證var的類型是確定的。

那么話又說回來了,var結(jié)合泛型的鉆石符號<>會有什么情況發(fā)生呢?

下面的 empList的類型是ArrayList :

 
 
 
 
  1. var empList = new ArrayList<>(); 

如果我們需要明確集合中放的都是Apple就必須在右邊顯式聲明:

 
 
 
 
  1. var apples = new ArrayList(); 

不可變集合

其實在Java 9中不可變集合已經(jīng)得到了一些加強(qiáng),在Java 10中進(jìn)一步加強(qiáng)了不可變集合。為什么不可變集合變得如此重要?

不可變性(immutability),這是函數(shù)式編程的基石之一,因此加強(qiáng)不可變集合有助于函數(shù)式編程在Java中的發(fā)展。

安全性,由于集合不可變,因此就不存在競態(tài)條件,天然的線程安全性,無論在編碼過程中和內(nèi)存使用中都有一定的優(yōu)勢,這種特性在Scala和Kotlin這兩種編程語言中大放異彩。

在Java 10 中又引入了一些新的API。

集合副本

復(fù)制一個集合為不可變集合:

 
 
 
 
  1. List copyList = List.copyOf(apples); 

任何修改此類集合的嘗試都會導(dǎo)致java.lang.UnsupportedOperationException異常。

Stream歸納為不可變集合

之前Stream API的歸納操作collect(Collector collector)都只會把流歸納為可變集合,現(xiàn)在它們都有對應(yīng)的不可變集合了。舉個例子:

List names= apples.stream() .map(Apple::getName) .collect(Collectors.toUnmodifiableList());

Optional.orElseThrow()

 
 
 
 
  1. Optional optional = Optional.ofNullable(nullableVal);        // 可能會 NoSuchElementException        String  nullable = optional.get(); 

Optional如果值為null時去get會拋出NoSuchElementException異常。從語義上get應(yīng)該肯定能得到什么東西,但是實際上異常了,這種歧義性太大了。所以增加了一個orElseThrow()方法來增強(qiáng)語義性。

其它增強(qiáng)特性 

Java 10的性能也明顯加強(qiáng)了,支持G1并行垃圾收集。另外引入了即時編譯技術(shù)(JIT),該技術(shù)可以加速java程序的運(yùn)行速度。另外Java 10對容器集成也進(jìn)行了優(yōu)化,JVM會根據(jù)容器的配置進(jìn)行選擇CPU核心數(shù)量和內(nèi)存占用。還有其它一些底層優(yōu)化特性這里就不多說了,了解為主,當(dāng)你達(dá)到一定的層次會自己去了解的。到此Java 10的一些變化就歸納完了,其實并不是很多,都很好掌握。多多關(guān)注,不要走開,下次我們將對Java 11的一些變化和改進(jìn)進(jìn)行歸納。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。


本文名稱:從 Java 9 到 Java 17 之 Java 10
當(dāng)前網(wǎng)址:http://www.5511xx.com/article/cosijpp.html