<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Kotlin 密封類 > 原文: [https://www.programiz.com/kotlin-programming/sealed-class](https://www.programiz.com/kotlin-programming/sealed-class) #### 在本文中,您將在示例的幫助下了解密封類,如何創建它們以及何時使用它們。 當值只能具有有限集合(受限制的層次結構)中的一種類型時,使用密封類。 * * * 在詳細介紹密封類之前,讓我們探討它們解決的問題。 讓我們舉個例子(摘自 Kotlin 官方網站-[密封類](https://kotlinlang.org/docs/reference/sealed-classes.html)文章): ```kt class Expr class Const(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun eval(e: Expr): Int = when (e) { is Const -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") } ``` 在上述程序中,基類`Expr`具有兩個派生類`Const`(代表一個數字)和`sum`(代表兩個表達式的總和)。 在這里,必須使用`else`分支作為`when`表達式的[默認條件](/kotlin-programming/when-expression "Kotlin when expression")。 現在,如果您從`Expr`類派生新的子類,則編譯器將不會檢測到任何東西,因為`else`分支對其進行處理會導致錯誤。 如果在添加新的子類時編譯器發出錯誤,那就更好了。 要解決此問題,可以使用密封類。 如前所述,密封類限制了創建子類??的可能性。 并且,當您在`when`表達式中處理密封類的所有子類時,不必使用`else`分支。 * * * 要創建密封類,請使用密封修飾符。 例如, ```kt sealed class Expr ``` * * * ### 示例:密封類 使用密封類可以解決上述問題: ```kt sealed class Expr class Const(val value: Int) : Expr() class Sum(val left: Expr, val right: Expr) : Expr() object NotANumber : Expr() fun eval(e: Expr): Int = when (e) { is Const -> e.value is Sum -> eval(e.right) + eval(e.left) NotANumber -> java.lang.Double.NaN } ``` 如您所見,沒有`else`分支。 如果您從`Expr`類派生新的子類,則除非該子類在`when`表達式中進行處理,否則編譯器將抱怨。 * * * ### 幾個重要說明 * 密封類的所有子類必須在聲明了密封類的同一文件中聲明。 * 密封類本身就是[抽象](https://www.programiz.com/kotlin-programming/abstract-class "Kotlin Abstract class"),您不能從中實例化對象。 * 您不能創建密封類的非私有構造器。 它們的構造器默認為`private`。 * * * ### 枚舉與密封類之間的區別 *枚舉類*和密封類非常相似。 枚舉類型的值集也像密封類一樣受到限制。 唯一的區別是,枚舉只能有一個實例,而密封類的子類可以有多個實例。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看