java 8 新功能详解_Java 8的8个新功能
java 8 新功能詳解
注意:確保還檢查了我們的詳細(xì)教程Java 8 Features – ULTIMATE Guide 。
Jdk 1.8(又名Java 8)今天發(fā)布,這意味著它的通用發(fā)布版本已經(jīng)公開發(fā)售,開發(fā)人員可以從早期版本轉(zhuǎn)換為經(jīng)過測試的版本以用于生產(chǎn)。 但是對于繁忙的Java開發(fā)人員來說,這對您意味著什么? 好吧,我總結(jié)了一些要標(biāo)記此版本的要點(diǎn):
1.Lamda表達(dá)式
我從lambda表達(dá)式開始,因?yàn)樗赡苁荍ava 5中的Generics / Annotations之后的語言中最受歡迎的功能。
語法如下:
(argtype arg...) -> { return some expression.. probably using these arguments }它的作用是在明顯的地方(例如在匿名內(nèi)部類中)減少代碼。 (搖擺動(dòng)作處理程序變得很性感,是的!)
因此,線程可以更改為:
Runnable oldRunner = new Runnable(){public void run(){System.out.println("I am running");} }; Runnable java8Runner = () ->{System.out.println("I am running"); };與Scala相似,Lambdas中也可以進(jìn)行類型推斷。 考慮以下可用示例:
Comparator c = (a, b) -> Integer.compare(a.length(), b.length());在此,隨著比較方法的實(shí)現(xiàn),可以推斷出a,b的類型(在這種情況下為String,來自Comparator接口)。
用于將塊與參數(shù)分開的符號->與Scala中已經(jīng)使用的=>十分相似,如果您擅長使用該符號,則沒有太多理由進(jìn)行切換,因?yàn)槟鷷?huì)感覺到Java中實(shí)現(xiàn)lambda的方式是不夠的(和冗長),但是對于一個(gè)優(yōu)秀的'ol Java程序員來說,這是要走的路。
2.通用類型的更改和改進(jìn)
從Lambdas獲得線索后,通用集合還可以推斷要使用的數(shù)據(jù)類型。 例如,使用通用集合的方法無需指定通用類型。 因此,以下方法
SomeClass.method();可以簡單地忽略類型信息而調(diào)用:
SomeClass.method();可以通過方法簽名來推斷類型,這對于嵌套調(diào)用(如
myCollection.sort().removeUseless().beautify();3.流集合類型(
流是一個(gè)迭代器,它允許對其調(diào)用的集合進(jìn)行單次運(yùn)行。 與Lambdas一起,這是另一個(gè)值得關(guān)注的功能。 您可以使用流來執(zhí)行諸如Filer或?qū)线M(jìn)行映射/縮小的功能性操作,這些集合可以使用Stream對象作為單個(gè)元素進(jìn)行流式處理。 流可以根據(jù)需要順序或并行運(yùn)行。 并行模式利用fork / join框架,可以利用多個(gè)內(nèi)核的功能。
例:
List guys = list.getStream.collect(Collectors.toList())也可以并行實(shí)現(xiàn)為
List guys = list.getStream.parallel().collect(Collectors.toList()將集合減少為單個(gè)項(xiàng)目的另一個(gè)不錯(cuò)的示例是調(diào)用reduce algorithem。
int sum = numberList.stream().reduce(0, (x, y) -> x+y);要么,
int sum = numberList.stream().reduce(0, Integer::sum);4.功能接口(
這些接口包含一些不需要實(shí)現(xiàn)的默認(rèn)方法,可以直接從該接口運(yùn)行。 這對現(xiàn)有代碼有幫助-更改接口不必使實(shí)現(xiàn)它的所有類都實(shí)現(xiàn)新方法。 這類似于Scala中的Traits,功能接口將與lambda兼容。
5. Nashorn –
這是使我們能夠運(yùn)行javascript以在jvm上運(yùn)行的javascript引擎。 它類似于運(yùn)行Node.js的chrome提供的V8引擎。 它與Node.js應(yīng)用程序兼容,同時(shí)還允許服務(wù)器上運(yùn)行的javascript代碼調(diào)用實(shí)際的Java庫。 至少可以說這令人興奮,因?yàn)樗苯訉ode.js的可伸縮性和異步特性與安全且廣泛的服務(wù)器端Java中間件結(jié)合在一起。
6.日期/時(shí)間更改(
http://download.java.net/jdk8/docs/api/java/time/package-summary.html
日期/時(shí)間API移至java.time包,并遵循Joda時(shí)間格式。 另一個(gè)好處是,大多數(shù)類都是線程安全的并且是不可變的。
7.類型注釋
現(xiàn)在,注釋可用于裝飾通用類型本身。
例如:
List<@Nullable String>這并非總是希望的,但在某些情況下可以證明是有用的。 除了裝飾泛型類型之外,它還可以用于構(gòu)造函數(shù)和強(qiáng)制轉(zhuǎn)換。
new @NonEmpty @Readonly List(myNonEmptyStringSet) new @Interned MyObject()myString = (@NonNull String) myObject;甚至可以注釋數(shù)組對象:
@NotNull String[] arr;包含RuntimeVisibleTypeAnnotations和RuntimeInvisibleTypeAnnotations屬性,這些屬性使.class文件保存注釋信息。
8.Other –(很高興)更改
在TypeName,GenericString等的支持下,反射api有所增加。
String.join()方法是一個(gè)受歡迎的補(bǔ)充,因?yàn)閯?chuàng)建了許多自行創(chuàng)建的實(shí)用程序類。 所以,下面的例子
String abc= String.join(" ", "Java", "8");將被評估為“ Java 8”。
在“集合”包中,對Comparator接口進(jìn)行了改進(jìn),并添加了諸如反轉(zhuǎn),比較和隨后的COmparing之類的方法,可輕松自定義多個(gè)字段的比較。 諸如Concurrency和NIO之類的其他庫也已更新,但值得關(guān)注,并且與api中的更改保持一致。
總體而言,Java8被深思熟慮,并且使主流Java變得簡明扼要,并選擇了Scala / Clojure的一些出色部分來改進(jìn)其語法并解決人們所尋求的功能。
翻譯自: https://www.javacodegeeks.com/2014/03/8-new-features-for-java-8.html
java 8 新功能詳解
總結(jié)
以上是生活随笔為你收集整理的java 8 新功能详解_Java 8的8个新功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击一般持续多久(ddos攻击每
- 下一篇: java美元兑换,(Java实现) 美元