Java 7路線圖更新 未包含閉包特性
在Devoxx大會(huì)上,Java SE首席工程師Mark Reinhol,做了一個(gè)關(guān)于Java 7(2010年初發(fā)布)最新發(fā)展方向的演講。雖然,Mark稱這次演講的內(nèi)容只是暫時(shí)的計(jì)劃、不具約束力,但是仍然在社區(qū)中引起了很多反響,特別是針對(duì)閉包特性(Closures)的遺漏。
Java 7特性的重要變化:
模塊化——294和Jigsaw項(xiàng)目
292——JVM對(duì)動(dòng)態(tài)語(yǔ)言的支持
JSR 203——更多新的I/O API已基本完成,包括真正異步的I/O(不僅僅是非阻塞I/O)和一個(gè)真正的文件系統(tǒng)API。
JSR TBD:小的語(yǔ)言變化(見(jiàn)下)
安全重拋出——允許一個(gè)廣泛的catch語(yǔ)句,編譯器可以更加智能的基于try語(yǔ)句塊中拋出的異常管理重新拋出。(我以前沒(méi)有見(jiàn)過(guò),不過(guò)看起來(lái)不錯(cuò))
Nulll解引用(dereference)表達(dá)式——Null通過(guò)'?'語(yǔ)法檢查,類似于Groovy...使開(kāi)發(fā)人員避免一連串null檢查。
更好的類型推斷(type inference)——與泛型實(shí)例化有關(guān),但目前還不清楚這種推斷會(huì)達(dá)到什么程度(我覺(jué)得越多越好)。
多捕捉(Multi-catch)——(是的?。┰试S在catch語(yǔ)句中用逗號(hào)分割一系列異常類型。
Joe Darcy正在領(lǐng)導(dǎo)Open JDK開(kāi)發(fā),他的博客地址是http://blogs.sun.com/darcy
JSR 296——Swing應(yīng)用框架——仍然需要更簡(jiǎn)化以方便Swing應(yīng)用開(kāi)發(fā)。
6u10特性的向前兼容(Java Kernal、QUickstarter、新Plug-in等)。
Java 7中可能不會(huì)引入的特性:
閉包——圍繞提議沒(méi)有形成一致意見(jiàn)
具體化泛型(Reified generics)
第一類屬性(1st class properties)
操作符重載
BigDecimal語(yǔ)法
JSR 295——Bean綁定
Java.net開(kāi)展了一次有關(guān)“哪些Java 7未采納的特性是你最感興趣的”的調(diào)查,其中閉包明顯處于其他特性之前:
閉包 |
47.4% (734 Votes) |
具體化泛型 |
17.2% (266 Votes) |
第一類屬性 |
10.4% (162 Votes) |
操作符重載 |
4.3% (67 Votes) |
BigDecimal語(yǔ)法 |
3.4% (54 Votes) |
JSR-295 Bean綁定 |
7.3% (113 Votes) |
我對(duì)任何特性都不感興趣 |
9.7% (150 Votes) |
以下是社區(qū)中的部分反應(yīng):
Ricky Clarkson:沒(méi)有閉包Java將滅亡
果然被證實(shí)了。雖然James Gosling想要閉包,雖然已經(jīng)有了3個(gè)閉包原型編譯器,雖然其他JVM語(yǔ)言支持閉包,Java 7還是沒(méi)有閉包。
Martin Kneissl:Java 7中沒(méi)有閉包是個(gè)壞消息
應(yīng)該增加閉包而不是Java 5中的“for”循環(huán)新形式。在Java 6中就應(yīng)該有閉包。現(xiàn)在似乎Java 7中也不會(huì)有了。
閉包并不難以理解。至少當(dāng)你把它們與Java中的匿名內(nèi)部類作比較時(shí)是這樣的。有的人不贊同。他們覺(jué)得總有一些愚蠢的程序員,所以應(yīng)該限制語(yǔ)言以防止他們引起太多破壞,我不認(rèn)同這個(gè)理由。這是不可能的。不稱職的程序員在任何語(yǔ)言中都會(huì)搬起石頭砸自己的腳。
幸運(yùn)的是,JVM上還有其他語(yǔ)言可以使用Java的優(yōu)點(diǎn):庫(kù)、可移植性和工具(某種程度上)。
Dustin Marx則對(duì)閉包有一些矛盾的看法
就在我寫(xiě)這篇帖子的時(shí)候,已經(jīng)有160票投完(不過(guò)很快就會(huì)出現(xiàn)新的投票),其中Java SE 7中最期待的落選特性是閉包。目前,閉包特性已經(jīng)得到了總票數(shù)的幾乎一半。從某種意義上說(shuō),這并不奇怪。閉包似乎主宰了Java SE 7的討論直到被宣布不會(huì)在Java SE 7中引入。但是討論是圍繞著閉包的概念和如何實(shí)現(xiàn)閉包進(jìn)行的爭(zhēng)論。雖然閉包是Java SE 7最期待的落選特性之一,但是我個(gè)人對(duì)此非常矛盾。我有時(shí)會(huì)偶然的在工作中意識(shí)到閉包是多么有用,但是多數(shù)情況下沒(méi)有它我也可以應(yīng)付。也就是說(shuō),我不介意它被引入,但是當(dāng)我聽(tīng)到?jīng)]有被包含在Java SE 7中時(shí)這并沒(méi)有困擾我。但是,如果我們相信目前的投票結(jié)果,那么接近一半的Java開(kāi)發(fā)人員最想要這個(gè)特性。這與Java.net有關(guān)開(kāi)發(fā)人員最想要Java SE 7引入閉包的問(wèn)卷調(diào)查是一致的。
Osvaldo Doederlein對(duì)新特性感到興奮,不過(guò)仍然很期望閉包
Java 7是多年基礎(chǔ)設(shè)施智能化的最好版本:294/Jigsaw,并發(fā)類加載——我認(rèn)為這會(huì)提高大應(yīng)用程序的啟動(dòng)時(shí)間,特別是類似于JavaEE服務(wù)器和IDE 等基于微內(nèi)核的應(yīng)用,XRender——將最終使Java成為L(zhǎng)inux桌面應(yīng)用的一等公民,G1,全64位支持(將在6u12中首次亮相,獲取beta版),F(xiàn)orkJoin。
這么多的好特性,我?guī)缀醵伎焱耸ラ]包的悲傷了。我猜是時(shí)候轉(zhuǎn)移到Scala、JavaFX或者其他現(xiàn)代JVM語(yǔ)言上了(只要不是類似于Ruby 或者Python的動(dòng)態(tài)類型語(yǔ)言)。我認(rèn)為從現(xiàn)在開(kāi)始五年,如果我編寫(xiě)某種低層次的運(yùn)行時(shí),我會(huì)只寫(xiě)“標(biāo)準(zhǔn)”Java代碼。多虧社區(qū)的保護(hù),Java語(yǔ)言 正在慢慢轉(zhuǎn)為一種遺產(chǎn)和低層次的角色。
Matt Grommes關(guān)注于BigDecimal語(yǔ)法
我致力于一個(gè)金融系統(tǒng)有一年多時(shí)間了,BigDecimal語(yǔ)法簡(jiǎn)直太痛苦了。我真的非常不滿意。
Devoxx和JavaEdge的與會(huì)者對(duì)JDK7語(yǔ)言的可能變化進(jìn)行投票
絕對(duì)的勝者是——null處理。Null處理獲得了50張最優(yōu)先支持票,是排在第二位的字符串切換(string switch)特性票數(shù)的兩倍,幾乎是全部最優(yōu)先支持票數(shù)的三分之一。而且,幾乎有三分之二的與會(huì)者把它放在了前四位優(yōu)先支持的特性里。
其他受歡迎的特性包括字符串切換、異常的多捕捉、對(duì)Map的增強(qiáng)型for-each循環(huán)(能夠刪除或者查找索引)和ARM風(fēng)格的資源管理。
不受歡迎的特性(特別認(rèn)為是糟糕建議的)是通過(guò)[]訪問(wèn)List/Map和字符串插值(字符串中的${variable} )。
泛型推斷和多行字符串處于相對(duì)較低優(yōu)先級(jí)但與會(huì)者不是特別反感。
值得一提的是,在Devoxx上對(duì)閉包特性的投票結(jié)果是50:50。
【編輯推薦】