翻譯|使用教程|編輯:鮑佳佳|2020-09-11 14:39:16.290|閱讀 1239 次
概述:在本文中,我將介紹Java 15中所有新的和更新的語言功能,為什么需要它們,并且將向您展示如何在IntelliJ IDEA中使用它們。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
IntelliJ IDEA是Java語言開發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認為優(yōu)秀的Java開發(fā)工具之一,尤其在智能代碼助手、代碼自動提示、重構(gòu)、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創(chuàng)新的GUI設(shè)計等方面的功能可以說是超常的。雙節(jié)福利來襲!IntelliJ正版授權(quán)最高立減2000!點擊查看詳情!
IntelliJ IDEA配置2020年7月發(fā)布的IntelliJ IDEA 2020.2支持Java 15功能。您可以通過將Project SDK選擇為15,并將“Project language level”選擇為“ 15(預(yù)覽)–密封類型,將其配置為使用Java 15”,“記錄,模式,本地枚舉和接口”,用于您的項目和模塊設(shè)置。
Java 15將在2020年9月15日發(fā)布GA(General Availability),之后您還可以直接從IntelliJ IDEA下載它。為此,請單擊“Platform Settings”下的SDK,然后單擊頂部的“ +”號,選擇“下載JDK”,然后選擇供應(yīng)商以及版本和目錄,以將JDK下載到該目錄。
重訪Gardner類中的Plant類型創(chuàng)建密封的層次結(jié)構(gòu)后,您將能夠以精確的方式處理層次結(jié)構(gòu)中的實例,而無需處理任何“general”實現(xiàn)。process類中的方法Gardner將無法運行該else子句。但是,if– else構(gòu)造的語法仍然需要您定義else部件(在將來的Java版本中可能會更改)。
在Java 14中為instanceof的模式匹配引入的Type-test-patterns可以在將來的Java版本中添加到開關(guān)表達式中。使用增強的switch表達式,您可以使用詳盡的擴展類型列表。這使您可以消除為Plant傳遞給方法的不匹配類型而執(zhí)行的任何“general code”的定義processInAFutureJavaVersion:
// This code doesn't work in Java 15. // It would work in a future Java version after the addition of // type-test-pattern to the switch expressions int processInAFutureJavaVersion(Plant plant) { return switch (plant) { case Cucumber c -> c.harvestCucumber(); case Climber cl -> cl.sowClimber(); case Herb h -> h.sellHerb(); case Shrub s -> s.pruneShrub(); } }
密封的類及其實現(xiàn)不能跨越多個模塊。如果在命名模塊中定義了密封的基類,則其所有實現(xiàn)都必須在同一模塊中定義。但是,它們可以出現(xiàn)在不同的程序包中。
對于在未命名模塊中定義的密封類,其所有實現(xiàn)都必須在同一包中定義。
基本和擴展類的規(guī)則擴展密封類的類必須是最終的,未密封的或密封的。非密封類允許其他類對其進行擴展。密封的子類必須遵循與父基類相同的規(guī)則集–可以通過其他類的顯式列表進行擴展。
密封的類也可以是抽象的。擴展類可以定義為抽象或具體類。
讓我們修改上一節(jié)中使用的類集,Plant并使用abstract方法將類定義為抽象類grow()。由于派生類Herb是最終類,因此必須實現(xiàn)method grow()。現(xiàn)在,未密封的派生類Shrub是一個抽象類,它可能無法實現(xiàn)方法grow()。如果不需要將其定義為抽象類,則密封派生類將Climber實現(xiàn)abstract方法grow():
sealed abstract public class Plant permits Herb, Shrub, Climber { abstract void grow(); } final class Herb extends Plant { @Override void grow() { } } non-sealed abstract class Shrub extends Plant {} sealed class Climber extends Plant permits Cucumber{ @Override void grow() { } } final class Cucumber extends Climber {}
密封接口
密封接口允許您顯式指定可以擴展它的接口以及可以實現(xiàn)它的類(包括記錄)。它遵循類似于密封類的規(guī)則。
但是,由于您不能使用修飾符聲明接口final(因為這樣做會與接口的用途發(fā)生沖突,因為必須實現(xiàn)接口),可以使用sealed或non-sealed修飾符聲明繼承接口。permits接口聲明的子句列出了可以直接實現(xiàn)密封接口和擴展接口的類。一個實現(xiàn)類可以是最終的,密封的或非密封的。由于Java 14中引入的記錄是隱式最終的,因此它們不需要任何其他修飾符:
這是供參考的代碼:
sealed public interface Move permits Athlete, Person, Jump, Kick { } final class Athlete implements Move {} record Person(String name, int age) implements Move {} non-sealed interface Jump extends Move {} sealed interface Kick extends Move permits Karate {} final class Karate implements Kick {}
好了這就是今天的內(nèi)容了,你學(xué)會了嗎?如果今天的文章未解決你的需求,可點擊獲取更多免費教程。不要忘了在評論與我們分享您的想法和建議,現(xiàn)IntelliJ正版授權(quán)在線訂購最高立減3000元!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: