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

沒有留言:

張貼留言

ESP32 微控制器 採集的環境數據,經由 MQTT 協定 轉換並寫入工業標準的 Modbus 暫存器 中

  一個典型的 IoT(物聯網)與工業自動化系統整合(SCADA/機台連線) 的架構圖。它透過 Node-RED 作為核心資料網關,將前端 ESP32 微控制器 採集的環境數據,經由 MQTT 協定 轉換並寫入工業標準的 Modbus 暫存器 中。 1. 各模組功能拆解...