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