java7和java8切换_切换表达式到Java吗?
java7和java8切換
已創(chuàng)建一個(gè)標(biāo)題為“ Java語(yǔ)言的開(kāi)關(guān)表達(dá)式”的JEP草案 。 當(dāng)前的“摘要”狀態(tài)為:“擴(kuò)展switch語(yǔ)句,以便可以將其用作語(yǔ)句或表達(dá)式,并改善switch處理null的方式。 這些將簡(jiǎn)化日常編碼,并為在switch使用模式匹配做好準(zhǔn)備?!?除了啟用令人興奮的模式匹配JEP(305)之外,所提議的Java switch表達(dá)式本身還具有一些有希望的特征。
Java教程將Java 語(yǔ)句定義為“大致執(zhí)行單元”,“大致等同于自然語(yǔ)言中的句子”。 它將Java 表達(dá)式定義為“由變量,運(yùn)算符和方法調(diào)用組成的構(gòu)造,其結(jié)果為單個(gè)值?!?當(dāng)前的Java switch是一條語(yǔ)句 ,但是JEP草案建議將switch也作為表達(dá)式來(lái)支持。
JEP的Switch Expression草案在其“動(dòng)機(jī)”部分指出:“當(dāng)我們準(zhǔn)備增強(qiáng)Java語(yǔ)言以支持模式匹配時(shí) ,現(xiàn)有的switch語(yǔ)句的一些不規(guī)則性(長(zhǎng)期以來(lái)一直困擾著用戶)成為障礙?!?JEP草案具有很高的可讀性,并包含有趣的討論點(diǎn)和說(shuō)明性的代碼示例,這些示例說(shuō)明Java switch語(yǔ)句當(dāng)前在其他Java構(gòu)造函數(shù)中通常如何有效地用作表達(dá)式。 JEP草案顯示了將switch擴(kuò)展為用作表達(dá)式的提議,以及作為語(yǔ)句得到支持的提議,將如何提高代碼的可讀性和可維護(hù)性。
Java表達(dá)式需要“求值為單個(gè)值”。 當(dāng)前提出的switch表達(dá)式將允許break關(guān)鍵字充當(dāng)Java方法中的return 。 可以在break關(guān)鍵字之后指定一個(gè)值,并且該值將從switch表達(dá)式中“返回”。
因?yàn)镴ava 表達(dá)式 “求值為單個(gè)值”,所以必須使用用作表達(dá)式的Java switch來(lái)提供默認(rèn)值。 JEP草案中涵蓋的一個(gè)有趣的轉(zhuǎn)折是枚舉。 JEP草案指出:“……對(duì)于涵蓋所有已知情況的枚舉switch表達(dá)式(最終,通過(guò)密封類型的switch表達(dá)式),編譯器可以插入默認(rèn)子句,指示枚舉定義在兩次編譯之間已更改時(shí)間和運(yùn)行時(shí)間。 (這是開(kāi)發(fā)人員今天手動(dòng)執(zhí)行的操作,但是與手工編寫的相比,讓編譯器插入它既不那么具有侵入性,又可能具有更具描述性的錯(cuò)誤消息。)“我發(fā)現(xiàn)這特別有趣,因?yàn)槲乙呀?jīng)看到很多情況了在這種情況下,開(kāi)發(fā)人員未為枚舉上的switch編寫“默認(rèn)值”,因?yàn)楫?dāng)時(shí)所有的枚舉值都被case s覆蓋,或者編寫了非常通用的錯(cuò)誤消息。 實(shí)際上,碰到后者的多個(gè)示例最終使我寫了博客文章“ Log Unexpected Switch Options” 。
JEP草案還涵蓋了一些建議的增強(qiáng)功能,這些功能將使當(dāng)前的switch語(yǔ)句和新的switch表達(dá)式都受益。 其中之一就是能夠指示如何處理傳遞給switch語(yǔ)句的null引用類型。 例如,今天,如果將null String傳遞給switch語(yǔ)句,則會(huì)引發(fā)NullPointerException 。 有了這個(gè)建議,開(kāi)發(fā)人員可以指定case null子句。 當(dāng)前的提議將處理任何未明確處理的null因?yàn)榻裉煸趕witch會(huì)處理null (通過(guò)拋出NullPointerException )。
針對(duì)當(dāng)前switch語(yǔ)句和擬議的switch表達(dá)式提出的第二個(gè)有益特征是允許單個(gè)case子句支持多個(gè)以逗號(hào)分隔的潛在匹配值。 可以使用單個(gè)case而不是使用共享單個(gè)break三個(gè)case子句指定適用于相同行為的三個(gè)值。
“切換表達(dá)式草稿”仍然是一個(gè)草稿,甚至沒(méi)有為其分配編號(hào),因此很容易受到潛在更改的影響。 確實(shí),該建議已在郵件列表中進(jìn)行了討論,并進(jìn)行了相當(dāng)多的修改,例如“ 切換表達(dá)式-一些修訂” 。 我在郵件列表中發(fā)現(xiàn)一條消息“ 切換float / double / long ”特別有趣。 這個(gè)有趣的消息是完整的,技術(shù)的或歷史的細(xì)節(jié),包括為何今天的switch語(yǔ)句不能long支持的背景,以及“居民浮點(diǎn)專家” Joe Darcy提供的有關(guān)浮點(diǎn)比較的有趣分析。
David Goldberg在1991年發(fā)表的文章“ 每位計(jì)算機(jī)科學(xué)家都應(yīng)了解的浮點(diǎn)算術(shù) ”是了解浮點(diǎn)算術(shù)和表示法復(fù)雜性的著名資源。 達(dá)西(Darcy)對(duì)這些問(wèn)題和IEEE 754浮點(diǎn)提供了一些有趣的見(jiàn)解。 他寫道:“為了解決對(duì)浮點(diǎn)數(shù)的一些常見(jiàn)誤解,盡管通常建議*不要*比較浮點(diǎn)數(shù)是否相等,但是進(jìn)行此類比較的定義非常明確,但可能并不能滿足您的要求?!?Darcy處理NaN ,正零和負(fù)零以及正無(wú)窮大和負(fù)無(wú)窮大的處理。 一個(gè)有趣的結(jié)論是,可以實(shí)現(xiàn)允許switch浮點(diǎn)數(shù)字類型float來(lái)真正打開(kāi)Float.floatToIntBits(float)提供的值 。
如果對(duì)Java的switch進(jìn)行擴(kuò)展,以便除了當(dāng)前用作語(yǔ)句之外,還可以將其用作表達(dá)式,則看起來(lái)可能會(huì)有激動(dòng)人心的時(shí)刻。 這是一個(gè)可以導(dǎo)致代碼更干凈,出錯(cuò)空間更少的開(kāi)發(fā)。
翻譯自: https://www.javacodegeeks.com/2017/12/switch-expressions-coming-java.html
java7和java8切換
總結(jié)
以上是生活随笔為你收集整理的java7和java8切换_切换表达式到Java吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ene的参数设置(ene的参数设置多少合
- 下一篇: optionals_Java Optio