• <menu id="w2i4a"></menu>
  • logo IntelliJ IDEA使用技巧

    文檔首頁>>IntelliJ IDEA使用技巧>>Java開發(fā)平臺intellij idea使用教程:如何在IntelliJ IDEA中使用JAVA15(上)

    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!點擊查看詳情!

    點擊下載 IntelliJ IDEA最新試用版

    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元!

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();