轉帖|使用教程|編輯:鮑佳佳|2020-09-10 15:14:14.753|閱讀 490 次
概述:Java 15引入了一種新的語言功能– 密封的類和接口。語言語法允許您限制可以擴展或實現其他類或接口的類或接口。目的是讓您以聲明的方式定義業務領域中可能的層次結構,以便更輕松地處理它們。此語言功能是作為預覽語言功能引入的。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
IntelliJ IDEA是Java語言開發的集成環境,IntelliJ在業界被公認為優秀的Java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。雙節福利來襲!IntelliJ正版授權最高立減2000!點擊查看詳情!
Java 15引入了一種新的語言功能– 密封的類和接口。語言語法允許您限制可以擴展或實現其他類或接口的類或接口。目的是讓您以聲明的方式定義業務領域中可能的層次結構,以便更輕松地處理它們。此語言功能是作為預覽語言功能引入的。
Java 15還修改了Java 14中引入的預覽語言功能Records,并增強了您慣用的接口和例子。在Java 14中作為預覽語言功能引入的instanceof模式匹配在Java 15中處于第二次預覽,而沒有任何更改。Java 13中引入了文本塊,將其作為標準語言功能添加到Java 15中。Java 14中的文本塊沒有更改。
在本文中,我將介紹Java 15中所有新的和更新的語言功能,為什么需要它們,并且將向您展示如何在IntelliJ IDEA中使用它們。
密封的類和接口(預覽語言功能)
通過將一個類定義為密封類,可以顯式定義哪些其他類可以對其進行擴展。一方面,它使您可以重用帶有繼承的類,另一方面,您可以限制哪些進行擴展類。但是,為什么需要創建受限的層次結構?
需要創建受限的層次結構想象一下,您正在創建一個可幫助用戶進行園藝活動的應用程序。根據植物的類型,園丁可能需要做不同的活動。讓我們對工廠層次結構進行如下建模:
class Plant {} class Herb extends Plant {} class Shrub extends Plant {} class Climber extends Plant{} class Cucumber extends Climber {}
以下是Gardener類如何使用此層次結構的示例:
public class Gardner { int process(Plant plant) { if (plant instanceof Cucumber) { return harvestCucumber(); } else if (plant instanceof Climber) { return sowClimber(); } else if (plant instanceof Herb) { return sellHerb(); } else if (plant instanceof Shrub) { return pruneShrub(); } else { System.out.println("Unreachable CODE. Unknown Plant type"); return 0; } } private int pruneShrub() { .. } private int sellHerb() { .. } private int sowClimber() { .. } private int harvestCucumber() { .. } }
問題代碼是開發人員必須在else零件中處理的假設。盡管現在無法訪問,但是如果另一個開發人員將一個類添加到該層次結構中會發生什么?密封的類可以在語言級別上對層次結構施加此限制。
使用密封類定義安全層次結構使用修飾符sealed,您可以將一個類聲明為密封類。密封的類使用reserved關鍵字permits列出可以直接擴展它的類。子類可以是最終的,非密封的或密封的。
以下gif顯示了如何將常規類的聲明更改為密封類并修改擴展它的類的聲明:
這是修改后的代碼,以供參考:
sealed public class Plant permits Herb, Shrub, Climber { } final class Herb extends Plant {} non-sealed class Shrub extends Plant {} sealed class Climber extends Plant permits Cucumber{} final class Cucumber extends Climber {}
通過允許一組預定義的類來擴展您的類,可以使可訪問性與可擴展性脫鉤。您可以使密封類可被其他包和模塊訪問,但仍可以控制誰可以擴展它。過去,為了防止擴展類,開發人員創建了程序包專用類。但是,這也意味著這些類的可訪問性受到限制。如果使用密封類,則不再是這種情況。
您可以使用Class.permittedSubclasses()方法通過反射獲取允許的子類。這樣就可以在運行時枚舉完整的密封層次結構,這很有用。
讓我們快速檢查系統上IntelliJ IDEA的配置,以確保您可以運行它。
好了這就是今天的內容了,你學會了嗎?接下來我們將會講解對IDEA的配置問題。如果今天的文章未解決你的需求,可點擊獲取更多免費教程。不要忘了在評論與我們分享您的想法和建議,現IntelliJ正版授權在線訂購最高立減3000元!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: