琥珀项目:Java的未来揭晓
如果一切按計(jì)劃進(jìn)行(我們正在研究Jigsaw項(xiàng)目),那么Java 9將在不到100天的時(shí)間內(nèi)啟動(dòng)。 您可以在此處加入倒計(jì)時(shí)以發(fā)布它。 它將包含一長(zhǎng)串新功能和升級(jí)功能,其中一些我們迫不及待想要看到實(shí)際應(yīng)用。
但是,有些功能還沒(méi)有為Java 9做好準(zhǔn)備,這就是Project Amber出現(xiàn)的地方,因此這些功能可以成為現(xiàn)實(shí)。 這是什么意思? 讓我們找出答案。
專(zhuān)注于Var / Val,Enums和Lambda
Java語(yǔ)言架構(gòu)師Brian Goetz于去年1月首次提出了Amber項(xiàng)目,當(dāng)時(shí)他提出創(chuàng)建一個(gè)項(xiàng)目來(lái)探索和孵化較小的,面向生產(chǎn)力的Java語(yǔ)言功能。
成為該項(xiàng)目一部分的功能的主要前提條件:已被接受為候選JEP,也稱(chēng)為JDK增強(qiáng)建議。 在此過(guò)程中,Oracle收集了有關(guān)Java開(kāi)發(fā)工具包和OpenJDK增強(qiáng)功能的建議。 批準(zhǔn)的提案將繼續(xù)成為Java的實(shí)際功能。
Goetz指出,這個(gè)項(xiàng)目不是思考或討論改進(jìn)Java的新想法和隨意想法的地方,并且“整個(gè)Internet仍然可以使用”。
3月16日,Goetz 歡迎Amber項(xiàng)目進(jìn)入Java社區(qū),并通過(guò)了前三個(gè)Java增強(qiáng)提案:
– 局部變量類(lèi)型推斷(JEP 286) –使用初始化程序?qū)㈩?lèi)型推斷擴(kuò)展到局部變量的聲明
– 增強(qiáng)枚舉(JEP 301) –使枚舉更好的功能
– Lambda剩菜(JEP 302) –改善lambda的可用性
為什么這三個(gè)項(xiàng)目受到如此特別的關(guān)注? 讓我們找出答案。
滿(mǎn)足琥珀項(xiàng)目的新功能
局部變量類(lèi)型推斷
大多數(shù)開(kāi)發(fā)人員對(duì)Java的主要問(wèn)題之一是它太冗長(zhǎng)。 雖然在閱讀并嘗試?yán)斫饩帉?xiě)函數(shù)時(shí)其他開(kāi)發(fā)人員的想法時(shí)這可能是一件好事,但在實(shí)際編寫(xiě)這些函數(shù)時(shí)可能會(huì)很乏味。
此功能建議向Java添加一些語(yǔ)法糖以簡(jiǎn)化它。 這將允許聲明變量而不必指定關(guān)聯(lián)的類(lèi)型。 例如,這:
List<String> list = new ArrayList<String>(); final Stream<String> stream = getStream();將被替換為:
var list = new ArrayList<String>(); val stream = getStream();如果您想了解有關(guān)此功能的更多信息,以及社區(qū)對(duì)此有何看法,請(qǐng)查看我們的Java新本地變量類(lèi)型推斷語(yǔ)言功能動(dòng)手概述 。
增強(qiáng)枚舉
此功能的目標(biāo)是增強(qiáng)Java語(yǔ)言中的枚舉構(gòu)造的表達(dá)能力。 如提案中所述,Java枚舉是功能強(qiáng)大且常用的構(gòu)造。 它們?cè)试S對(duì)常數(shù)進(jìn)行分組,其中每個(gè)常數(shù)都是一個(gè)單例對(duì)象。 當(dāng)變量必須等于為其預(yù)定義的值之一時(shí),它將使變量成為一組預(yù)定義的常數(shù)。 例如,星期幾。
增強(qiáng)功能將允許枚舉類(lèi)型變量(泛型支持),從而可以擴(kuò)展枚舉。 它還將對(duì)枚舉常量執(zhí)行更清晰的類(lèi)型檢查,以驗(yàn)證和強(qiáng)制執(zhí)行枚舉約束。
具有泛型支持的枚舉將使我們能夠指示鍵集及其關(guān)聯(lián)的類(lèi)型,并且我們能夠向單個(gè)項(xiàng)目添加方法。 這兩個(gè)功能將協(xié)同工作,以使枚舉常量能夠承載特定于常量的類(lèi)型信息以及特定于常量的狀態(tài)和行為。 增強(qiáng)的枚舉將使我們能夠使用通用類(lèi)型定義枚舉。 當(dāng)表示數(shù)學(xué)常數(shù)時(shí),可以顯示此功能某些值的示例:
public enum MathematicalConstants < T > {E < Double > (Math.PI),PI < Double > (Math.E),ZERO < Integer > (0),ONE < Integer > (1),i < Complex > (new Complex(0, 1))private MathematicalConstants(T underlyingObject) {this.underlyingObject = underlyingObject;} }在此示例中,我們可以添加對(duì)其他方法的支持,同時(shí)仍然享受每種方法的類(lèi)型安全性。 當(dāng)?shù)讓訉?duì)象不必是對(duì)象類(lèi)型時(shí),可以將不同類(lèi)型傳遞給枚舉的構(gòu)造函數(shù),這展示了此功能可以帶來(lái)的優(yōu)雅。
增強(qiáng)枚舉的另一個(gè)有用應(yīng)用是減少在不同數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換的樣板代碼。 例如,jdbc類(lèi)型轉(zhuǎn)換為Java類(lèi)型。 它可以幫助提高我們的代碼自我記錄的能力,并避免像“ instanceOf”檢查那樣的代碼氣味。
Lambda剩菜剩飯
Project Lambda于2014年隨Java 8一起發(fā)布,但總有改進(jìn)的余地。 這里的想法是通過(guò)增強(qiáng)方法上下文中函數(shù)表達(dá)式的歧義性來(lái)提高lambda表達(dá)式和方法引用的可用性。
此功能還著重于完成下劃線字符的修復(fù)以指示未使用的lambda參數(shù),并允許lambda參數(shù)對(duì)封閉范圍中的陰影變量。
使用下劃線作為未命名的lambda參數(shù)的符號(hào)的概念已經(jīng)在其他語(yǔ)言中存在,其目標(biāo)是也使其成為Java的一部分。 使用非常簡(jiǎn)單,看起來(lái)像這樣:
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);它為什么如此重要? 因?yàn)檫@將允許對(duì)未使用的參數(shù)進(jìn)行更強(qiáng)的靜態(tài)檢查,并且還允許將多個(gè)參數(shù)標(biāo)記為未使用。 但是,執(zhí)行該選項(xiàng)可能很困難,因?yàn)橄聞澗€已經(jīng)是有效的標(biāo)識(shí)符,并且需要進(jìn)行一些調(diào)整和兼容性才能使其起作用。
Java的附帶項(xiàng)目
Project Amber加入了諸如Valhalla之類(lèi)的Java長(zhǎng)期項(xiàng)目,以處理不可變且無(wú)引用的對(duì)象, Shenandoah旨在減少GC暫停時(shí)間和XRender Graphics Pipeline ,以創(chuàng)建新的Java2D圖形管道為目標(biāo)。 。
Lambda和Jigsaw是其中兩個(gè)比較受人關(guān)注的項(xiàng)目。 Lambda項(xiàng)目是Java 8的一部分,于2014年3月引入,它將Lambda表達(dá)式和流引入Java。 Jigsaw項(xiàng)目即將成為Java 9的一部分,旨在使Java模塊化并將JRE分解為可互操作的組件。
這兩個(gè)項(xiàng)目都花費(fèi)了大量的精力-Lambda于2009年12月首次引入,花了5年多的時(shí)間才成為Java的實(shí)際組成部分。 拼圖是在2008年12月推出的,隨后進(jìn)行了將近9年半的工作。
這不一定意味著項(xiàng)目Amber將具有相同的時(shí)間表,但這很好地表明了將主要功能集成到Java中需要花費(fèi)多長(zhǎng)時(shí)間。 但是,在此項(xiàng)目的公告中充滿(mǎn)了希望。
除了通常獲得的郵件列表項(xiàng)目外,Goetz還發(fā)布了正式的回購(gòu)協(xié)議。 與類(lèi)似的項(xiàng)目不同,由于團(tuán)隊(duì)將處理多個(gè)JEP,因此將在分支中完成工作,而默認(rèn)的JEP將同步到j(luò)dk10。 這是否意味著Amber可能會(huì)成為下一個(gè)Java版本的一部分? 我們將不得不拭目以待。
為什么是琥珀色?
如果您想知道名稱(chēng)及其名稱(chēng),Java開(kāi)發(fā)人員兼SitePoint Java部分的編輯Nicolai Parlog將這個(gè)問(wèn)題發(fā)給了Brian Goetz本人。 他得到了一個(gè)簡(jiǎn)單的回答:“為什么不呢?”。
但是,Goetz建議舉行比賽以提出候選人。 他親自挑選了獲勝者,并提供了以下解釋:
@java @BrianGoetz @nipafx或更可能的是:琥珀在希臘語(yǔ)中被稱(chēng)為elektron,這可能意味著“陽(yáng)光直射 ”(根據(jù)Wikipedia)
— Kwakeroni(@kwakeroni) 2017年3月28日
而且您必須承認(rèn)這聽(tīng)起來(lái)很酷。
最后的想法
Java是一種具有許多功能,能力和程序員的大型語(yǔ)言。 Project Amber加入了已經(jīng)在進(jìn)行中的功能列表,所有這些功能都具有相同的目標(biāo)-幫助開(kāi)發(fā)階段更快地進(jìn)行,并滿(mǎn)足Java工程師和開(kāi)發(fā)人員的需求。
現(xiàn)在有兩個(gè)主要問(wèn)題– Project Amber將采用哪些其他建議,以及將它們變成Java現(xiàn)實(shí)需要多長(zhǎng)時(shí)間。
翻譯自: https://www.javacodegeeks.com/2017/05/project-amber-future-java-exposed.html
總結(jié)
以上是生活随笔為你收集整理的琥珀项目:Java的未来揭晓的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ddos为什么这么厉害(ddos为什么这
- 下一篇: Java 7:使用NIO.2进行文件过滤