2019年5月21日 星期二

Kotlin學習筆記(17) 類型檢測及自動類型轉換

Kotlin學習筆記(17) 類型檢測及自動類型轉換 

is運算符檢測一個表達式是否某類型的一個實例。如果一個不可變的局部變量或屬性已經判斷出為某類型,那麼檢測後的分支中可以直接當作該類型使用,無需顯式轉換:

fun getStringLength1(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在该条件分支内自动转换成 `String`
        return obj.length
    }

    // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
    return null
}


fun getStringLength2(obj: Any): Int? {
    if (obj !is String) return null

    // `obj` 在这一分支自动转换为 `String`
    return obj.length
}

fun getStringLength3(obj: Any): Int? {
    // `obj` 在 `&&` 右边自动转换成 `String` 类型
    if (obj is String && obj.length > 0) {
      return obj.length
    }

    return null
}


fun main() {
    fun printLength1(obj: Any) {
        println("'$obj' string length is ${getStringLength1(obj) ?: "... err, is empty or not a string at all"} ")
    }
    printLength1("Incomprehensibilities")
    printLength1("")
    printLength1(1000)
println("-----------------------------------------------")
    fun printLength2(obj: Any) {
        println("'$obj' string length is ${getStringLength2(obj) ?: "... err, not a string"} ")
    }
    printLength2("Incomprehensibilities")
    printLength2(1000)
    printLength2(listOf(Any()))
println("-----------------------------------------------")
    fun printLength3(obj: Any) {
        println("'$obj' string length is ${getStringLength3(obj) ?: "... err, not a string"} ")
    }
    printLength3("Incomprehensibilities")
    printLength3(1000)
    printLength3(listOf(Any()))
}

輸出畫面
'Incomprehensibilities' string length is 21 '' string length is 0 '1000' string length is ... err, is empty or not a string at all ----------------------------------------------- 'Incomprehensibilities' string length is 21 '1000' string length is ... err, not a string '[java.lang.Object@3af49f1c]' string length is ... err, not a string ----------------------------------------------- 'Incomprehensibilities' string length is 21 '1000' string length is ... err, not a string '[java.lang.Object@19469ea2]' string length is ... err, not a string

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...