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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### **?:( Elvis操作符)** 在使用安全調用符調用可空變量中的成員方法或屬性時,如果當前變量為空,則會返回一個null值,但**有時即使當前變量為null,也不想返回一個null值而是指定一個默認值,此時該如何處理呢**?為了解決這樣的問題,Kotlin中提供了一個Elvis操作符(?:),通過Elvis操作符(?:)可以指定可空變量為null時,調用該變量中的成員方法或屬性的返回值,其語法格式為“`表達式?:表達式`”。如果左側表達式非空,則返回左側表達式的值,否則返回右側表達式的值。當且僅當左側為空時,才會對右側表達式求值。 ![](https://box.kancloud.cn/9444244dc466c89cd85eadbb6b1ef293_463x154.png) Elvis 運算符接收兩個運算數,如果第一個運算數不為null ,運算結果就是第一個運算數;如果第一個運算數為null ,運算結果就是第二個運算數 Kotlin中沒有這樣的三元運算符`true?1:0`,取而代之的是`if(true) 1 else 0`。而Elvis操作符算是精簡版的三元運算符。 用Elvis操作符(?:)可以把帶有默認值的if/else結構寫的及其短小。用Elvis操作符不用檢查null(避免了`NullPointerException`),也不用重復變量。 針對【變量?.方法】,如果變量為NULL,【變量?.方法】的返回結果是NULL,那我們**能不能指定想返回的值呢**? 答案是肯定的,我們**需要配合Elvis操作符**,使用方式為【**變量?:值** 】。參考代碼: ~~~ fun main(args: Array<String>) { //可空類型變量 var age: String? = null //使用安全調用符 val result = age?.toInt() ?: "age為null" //打印結果 println(result) } ~~~ 運行結果 ``` age為null Process finished with exit code 0 ``` * 使用Elvis操作符的一行代碼更換為如下代碼 ``` val result = age?.toInt() ?: 0 ``` 那么運行結果就是 ``` 0 Process finished with exit code 0 ``` * 使用Elvis操作符的一行代碼更換為如下代碼 ``` val result = age?.toInt() ?: throw NumberFormatException() ``` 運行結果如下 ``` Exception in thread "main" java.lang.NumberFormatException at day02.ElvisDemoKt.main(ElvisDemo.kt:14) Process finished with exit code 1 ``` **Elvis 運算符經常和安全調用運算符一起使用**,用一個值代替對null 對象調用方法時返回的null,如下代碼 ~~~ fun main(args: Array<String>) { fun strLenSafe(s:String?):Int=s?.length ?:0 println(strLenSafe("abc")) println(strLenSafe(null)) } ~~~ 運行結果 ``` 3 0 Process finished with exit code 0 ``` 在Kotlin 中有一種場景下Elvis 運算符會特別順手,像return 和throw 這樣的操作其實是表達式,因此可以把它們寫在Elvis 運算符的右邊。這種情況下,如果Elvis 運算符左邊的值為null ,函數就會立即返回一個值或者拋出一個異常。如果函數中需要檢查先決條件,這個方式特別有用。 ~~~ /** * 同時使用throw和Elvis運算符 */ import java.lang.IllegalArgumentException class Address1(val streetAddress:String,val zipCode:Int,val city:String,val country:String) class Company1(val name:String,val address: Address1?) class Person1(val name: String,val company: Company1?) fun printShippingLabel(person1: Person1){ val address1=person1.company?.address?:throw IllegalArgumentException("No Address")//如果缺少address1就拋出異常 with(address1){//"address1"不為空 println(streetAddress) println("$zipCode $city,$country") } } fun main(args: Array<String>) { val address1=Address1("Elsestr.47",80687,"Munich","Germany") val jetbrains=Company1("JetBrains",address1) val person1=Person1("Dmitry",jetbrains) printShippingLabel(person1) printShippingLabel(Person1("Alexey",null)) } ~~~ 運行結果 ``` Elsestr.47 80687 Munich,Germany Exception in thread "main" java.lang.IllegalArgumentException: No Address at A基礎.ElvisDemoKt.printShippingLabel(ElvisDemo.kt:13) at A基礎.ElvisDemoKt.main(ElvisDemo.kt:26) Process finished with exit code 1 ``` >[info]PS:如果一切正常,函數printShippingLabel會打印出標簽。如果地址不存在,它不會只是拋出一個帶行號的NullPointerException ,相反,它會報告一個有意義的錯誤。如果地址存在,標簽會包含街道地址、郵編、城市和國家。
                  <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>

                              哎呀哎呀视频在线观看