Java開發(fā)平臺intellij idea使用教程:如何在IntelliJ IDEA中使用JAVA15(上)
IntelliJ IDEA是Java語言開發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為優(yōu)秀的Java開發(fā)工具之一,尤其在智能代碼助手、代碼自動提示、重構(gòu)、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創(chuàng)新的GUI設(shè)計等方面的功能可以說是超常的。雙節(jié)福利來襲!IntelliJ正版授權(quán)最高立減2000!點擊查看詳情!
Java 15引入了一種新的語言功能– 密封的類和接口。語言語法允許您限制可以擴(kuò)展或?qū)崿F(xiàn)其他類或接口的類或接口。目的是讓您以聲明的方式定義業(yè)務(wù)領(lǐng)域中可能的層次結(jié)構(gòu),以便更輕松地處理它們。此語言功能是作為預(yù)覽語言功能引入的。
Java 15還修改了Java 14中引入的預(yù)覽語言功能Records,并增強(qiáng)了您慣用的接口和例子。在Java 14中作為預(yù)覽語言功能引入的instanceof模式匹配在Java 15中處于第二次預(yù)覽,而沒有任何更改。Java 13中引入了文本塊,將其作為標(biāo)準(zhǔn)語言功能添加到Java 15中。Java 14中的文本塊沒有更改。
在本文中,我將介紹Java 15中所有新的和更新的語言功能,為什么需要它們,并且將向您展示如何在IntelliJ IDEA中使用它們。
密封的類和接口(預(yù)覽語言功能)
通過將一個類定義為密封類,可以顯式定義哪些其他類可以對其進(jìn)行擴(kuò)展。一方面,它使您可以重用帶有繼承的類,另一方面,您可以限制哪些進(jìn)行擴(kuò)展類。但是,為什么需要創(chuàng)建受限的層次結(jié)構(gòu)?
需要創(chuàng)建受限的層次結(jié)構(gòu)想象一下,您正在創(chuàng)建一個可幫助用戶進(jìn)行園藝活動的應(yīng)用程序。根據(jù)植物的類型,園丁可能需要做不同的活動。讓我們對工廠層次結(jié)構(gòu)進(jìn)行如下建模:
class Plant {} class Herb extends Plant {} class Shrub extends Plant {} class Climber extends Plant{} class Cucumber extends Climber {}
以下是Gardener類如何使用此層次結(jié)構(gòu)的示例:
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() { .. } }
問題代碼是開發(fā)人員必須在else零件中處理的假設(shè)。盡管現(xiàn)在無法訪問,但是如果另一個開發(fā)人員將一個類添加到該層次結(jié)構(gòu)中會發(fā)生什么?密封的類可以在語言級別上對層次結(jié)構(gòu)施加此限制。
使用密封類定義安全層次結(jié)構(gòu)使用修飾符sealed,您可以將一個類聲明為密封類。密封的類使用reserved關(guān)鍵字permits列出可以直接擴(kuò)展它的類。子類可以是最終的,非密封的或密封的。
以下gif顯示了如何將常規(guī)類的聲明更改為密封類并修改擴(kuò)展它的類的聲明:
這是修改后的代碼,以供參考:
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 {}
通過允許一組預(yù)定義的類來擴(kuò)展您的類,可以使可訪問性與可擴(kuò)展性脫鉤。您可以使密封類可被其他包和模塊訪問,但仍可以控制誰可以擴(kuò)展它。過去,為了防止擴(kuò)展類,開發(fā)人員創(chuàng)建了程序包專用類。但是,這也意味著這些類的可訪問性受到限制。如果使用密封類,則不再是這種情況。
您可以使用Class.permittedSubclasses()方法通過反射獲取允許的子類。這樣就可以在運(yùn)行時枚舉完整的密封層次結(jié)構(gòu),這很有用。
讓我們快速檢查系統(tǒng)上IntelliJ IDEA的配置,以確保您可以運(yùn)行它。
好了這就是今天的內(nèi)容了,你學(xué)會了嗎?接下來我們將會講解對IDEA的配置問題。如果今天的文章未解決你的需求,可點擊獲取更多免費(fèi)教程。不要忘了在評論與我們分享您的想法和建議,現(xiàn)IntelliJ正版授權(quán)在線訂購最高立減3000元!