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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 1. 前言 所謂擴展函數也就是在原本類的基礎上增加一些新的方法。我們知道在`Java`中`String`等類定義為`final`也就是不允許修改和繼承,那么如果我們期望對這些類新增一些方法的時候,在`Java`中無法做到,而在`Kotlin`中卻提供了**擴展**來實現。也就是說,在`Kotlin`的擴展不僅可以用于自定義類,也可用于`String`等其它類。 而這種方式其實在`Kotlin`語言基礎中也使用過,類似于`JavaScript`中的原型。 # 2. 使用 ## 2.1 簡單擴展函數 比如下面的兩個簡單的案例: ~~~ fun String.doSomething(count: Int = 1): String{ return this.repeat(count) } fun Any.showInfo(): Any{ println(this) return this; } fun main() { "abc".showInfo() "abc".doSomething(2).showInfo() } ~~~ 結果: ``` abc abcabc ``` ## 2.2 泛型擴展函數 但是,當我們使用: ~~~ "abc".showInfo().doSomething(2).showInfo() ~~~ 卻不支持,因為`showInfo`函數返回的是`Any`類型,而`doSomething`針對的是字符串類型,前面的`Any`類型并不能保證就一定是字符串類型。所以這里可以使用泛型來解決這個問題。比如下面的修改: ~~~ fun String.doSomething(count: Int = 1): String{ return this.repeat(count) } fun <T> T.showInfo(): T{ println(this) return this; } fun main() { "abc".showInfo().doSomething(2).showInfo() } ~~~ 結果和上面的保持一致。這類擴展函數叫做**泛型擴展函數**,通常具有更加廣闊的使用空間。且在`Kotlin`的標準庫函數中,廣泛使用了這類函數,比如`let`函數: ~~~ public inline fun <T, R> T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } ~~~ ## 2.3 可空擴展函數 這里還是繼續對前面定義的函數進行可空的擴展,這里設置一個默認的打印值: ~~~ fun <T> T?.showInfo(default: String = "對象為空"): T?{ println(this ?: default) return this; } ~~~ 結果: ``` 對象為空 ```
                  <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>

                              哎呀哎呀视频在线观看