• <menu id="w2i4a"></menu>
  • logo IntelliJ IDEA入門教程

    文檔首頁(yè)>>IntelliJ IDEA入門教程>>Java開(kāi)發(fā)平臺(tái)intellij idea使用教程:如何在IntelliJ IDEA中使用JAVA15(下)

    Java開(kāi)發(fā)平臺(tái)intellij idea使用教程:如何在IntelliJ IDEA中使用JAVA15(下)


    IntelliJ IDEA是Java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為優(yōu)秀的Java開(kāi)發(fā)工具之一,尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能可以說(shuō)是超常的。雙節(jié)福利來(lái)襲!IntelliJ正版授權(quán)最高立減2000!點(diǎn)擊查看詳情!

    點(diǎn)擊下載 IntelliJ IDEA最新試用版

    IntelliJ IDEA配置

    2020年7月發(fā)布的IntelliJ IDEA 2020.2支持Java 15功能。您可以通過(guò)將Project SDK選擇為15,并將“Project language level”選擇為“ 15(預(yù)覽)–密封類型,將其配置為使用Java 15”,“記錄,模式,本地枚舉和接口”,用于您的項(xiàng)目和模塊設(shè)置。

    Java 15將在2020年9月15日發(fā)布GA(General Availability),之后您還可以直接從IntelliJ IDEA下載它。為此,請(qǐng)單擊“Platform Settings”下的SDK,然后單擊頂部的“ +”號(hào),選擇“下載JDK”,然后選擇供應(yīng)商以及版本和目錄,以將JDK下載到該目錄。

    重訪Gardner類中的Plant類型

    創(chuàng)建密封的層次結(jié)構(gòu)后,您將能夠以精確的方式處理層次結(jié)構(gòu)中的實(shí)例,而無(wú)需處理任何“general”實(shí)現(xiàn)。process類中的方法Gardner將無(wú)法運(yùn)行該else子句。但是,if– else構(gòu)造的語(yǔ)法仍然需要您定義else部件(在將來(lái)的Java版本中可能會(huì)更改)。

    在Java 14中為instanceof的模式匹配引入的Type-test-patterns可以在將來(lái)的Java版本中添加到開(kāi)關(guān)表達(dá)式中。使用增強(qiáng)的switch表達(dá)式,您可以使用詳盡的擴(kuò)展類型列表。這使您可以消除為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();
       }
    }

    封裝和模塊限制

    密封的類及其實(shí)現(xiàn)不能跨越多個(gè)模塊。如果在命名模塊中定義了密封的基類,則其所有實(shí)現(xiàn)都必須在同一模塊中定義。但是,它們可以出現(xiàn)在不同的程序包中。

    對(duì)于在未命名模塊中定義的密封類,其所有實(shí)現(xiàn)都必須在同一包中定義。

    基本和擴(kuò)展類的規(guī)則

    擴(kuò)展密封類的類必須是最終的,未密封的或密封的。非密封類允許其他類對(duì)其進(jìn)行擴(kuò)展。密封的子類必須遵循與父基類相同的規(guī)則集–可以通過(guò)其他類的顯式列表進(jìn)行擴(kuò)展。

    密封的類也可以是抽象的。擴(kuò)展類可以定義為抽象或具體類。

    讓我們修改上一節(jié)中使用的類集,Plant并使用abstract方法將類定義為抽象類grow()。由于派生類Herb是最終類,因此必須實(shí)現(xiàn)method grow()?,F(xiàn)在,未密封的派生類Shrub是一個(gè)抽象類,它可能無(wú)法實(shí)現(xiàn)方法grow()。如果不需要將其定義為抽象類,則密封派生類將Climber實(shí)現(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 {}

    密封接口

    密封接口允許您顯式指定可以擴(kuò)展它的接口以及可以實(shí)現(xiàn)它的類(包括記錄)。它遵循類似于密封類的規(guī)則。

    但是,由于您不能使用修飾符聲明接口final(因?yàn)檫@樣做會(huì)與接口的用途發(fā)生沖突,因?yàn)楸仨殞?shí)現(xiàn)接口),可以使用sealed或non-sealed修飾符聲明繼承接口。permits接口聲明的子句列出了可以直接實(shí)現(xiàn)密封接口和擴(kuò)展接口的類。一個(gè)實(shí)現(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é)會(huì)了嗎?如果今天的文章未解決你的需求,可點(diǎn)擊獲取更多免費(fèi)教程。不要忘了在評(píng)論與我們分享您的想法和建議,現(xiàn)IntelliJ正版授權(quán)在線訂購(gòu)最高立減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); })();