Java開發平臺intellij idea使用教程:如何在IntelliJ IDEA中使用JAVA15(下)
IntelliJ IDEA是Java語言開發的集成環境,IntelliJ在業界被公認為優秀的Java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。雙節福利來襲!IntelliJ正版授權最高立減2000!點擊查看詳情!
IntelliJ IDEA配置2020年7月發布的IntelliJ IDEA 2020.2支持Java 15功能。您可以通過將Project SDK選擇為15,并將“Project language level”選擇為“ 15(預覽)–密封類型,將其配置為使用Java 15”,“記錄,模式,本地枚舉和接口”,用于您的項目和模塊設置。

Java 15將在2020年9月15日發布GA(General Availability),之后您還可以直接從IntelliJ IDEA下載它。為此,請單擊“Platform Settings”下的SDK,然后單擊頂部的“ +”號,選擇“下載JDK”,然后選擇供應商以及版本和目錄,以將JDK下載到該目錄。
重訪Gardner類中的Plant類型創建密封的層次結構后,您將能夠以精確的方式處理層次結構中的實例,而無需處理任何“general”實現。process類中的方法Gardner將無法運行該else子句。但是,if– else構造的語法仍然需要您定義else部件(在將來的Java版本中可能會更改)。
在Java 14中為instanceof的模式匹配引入的Type-test-patterns可以在將來的Java版本中添加到開關表達式中。使用增強的switch表達式,您可以使用詳盡的擴展類型列表。這使您可以消除為Plant傳遞給方法的不匹配類型而執行的任何“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(); } }封裝和模塊限制
密封的類及其實現不能跨越多個模塊。如果在命名模塊中定義了密封的基類,則其所有實現都必須在同一模塊中定義。但是,它們可以出現在不同的程序包中。
對于在未命名模塊中定義的密封類,其所有實現都必須在同一包中定義。
基本和擴展類的規則擴展密封類的類必須是最終的,未密封的或密封的。非密封類允許其他類對其進行擴展。密封的子類必須遵循與父基類相同的規則集–可以通過其他類的顯式列表進行擴展。
密封的類也可以是抽象的。擴展類可以定義為抽象或具體類。
讓我們修改上一節中使用的類集,Plant并使用abstract方法將類定義為抽象類grow()。由于派生類Herb是最終類,因此必須實現method grow()。現在,未密封的派生類Shrub是一個抽象類,它可能無法實現方法grow()。如果不需要將其定義為抽象類,則密封派生類將Climber實現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 {}
密封接口
密封接口允許您顯式指定可以擴展它的接口以及可以實現它的類(包括記錄)。它遵循類似于密封類的規則。
但是,由于您不能使用修飾符聲明接口final(因為這樣做會與接口的用途發生沖突,因為必須實現接口),可以使用sealed或non-sealed修飾符聲明繼承接口。permits接口聲明的子句列出了可以直接實現密封接口和擴展接口的類。一個實現類可以是最終的,密封的或非密封的。由于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 {}
好了這就是今天的內容了,你學會了嗎?如果今天的文章未解決你的需求,可點擊獲取更多免費教程。不要忘了在評論與我們分享您的想法和建議,現IntelliJ正版授權在線訂購最高立減3000元!