kotlin中学习笔记——null
生活随笔
收集整理的這篇文章主要介紹了
kotlin中学习笔记——null
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
指定一個變量可null是通過在它的類型后面加?號,如
val a: String? = null (注意這個Int也可為空是因為在kotlin中一切都是對象,包括在java中的基本類型)
一個可null類型,沒有進行檢查前不能使用,如下代碼會編譯出錯
val a: String? = null
a.subString(2)
? kotlin另外一個特性是當我們檢查了一個可null類型,這個對象會自動轉型成不可null類型,這就是Kotlin編譯器的智能轉換,如 val a: String? = null if(a != null){a.subString(2) } 在if語句中,a從Int?變成了Int,所以可以直接使用。但是在if代碼外,則需要重新檢查。 當然這僅僅在變量當前不能被改變的前提下,如果變量可能被另外線程改變就會變得復雜。 如果我們處處去做判斷,代碼會臃腫起來,kotlin中有更簡潔的處理方式,如: val a: String? = null a?.subString() 我們使用安全訪問符"?",只有當不為null的時候才執行這行代碼。否則不會做任何事情。 但是注意如果有賦值行為的話,a為null的話會返回null,如: val a: String? = null val s = a?.subString() s會被賦值為null kotlin中還有一種_Elvis operator_(?:)操作符,使用如下: val a: String? = null val s = a?.subString(2) ?: "" val s = a?.subString(2) ?: return false val s = a?.subString(2) ?: throw IllegalStateException() 在kotlin中return和throw都是表達式,所以可以用在_Elvis operator_操作符右邊 當我們確定一個非null變量不為null,我們可以使用"!!"來強制跳過檢查正常編譯,如: val a: String? = null a!!.subString(2) 當然不推薦經常使用,因為是未經檢驗的存在null指針崩潰的可能。 在android新版本中,我們可以用@Nullable和@NotNull注解來辨別參數是否可以為空或者函數返回是否可以為空。
? kotlin另外一個特性是當我們檢查了一個可null類型,這個對象會自動轉型成不可null類型,這就是Kotlin編譯器的智能轉換,如 val a: String? = null if(a != null){a.subString(2) } 在if語句中,a從Int?變成了Int,所以可以直接使用。但是在if代碼外,則需要重新檢查。 當然這僅僅在變量當前不能被改變的前提下,如果變量可能被另外線程改變就會變得復雜。 如果我們處處去做判斷,代碼會臃腫起來,kotlin中有更簡潔的處理方式,如: val a: String? = null a?.subString() 我們使用安全訪問符"?",只有當不為null的時候才執行這行代碼。否則不會做任何事情。 但是注意如果有賦值行為的話,a為null的話會返回null,如: val a: String? = null val s = a?.subString() s會被賦值為null kotlin中還有一種_Elvis operator_(?:)操作符,使用如下: val a: String? = null val s = a?.subString(2) ?: "" val s = a?.subString(2) ?: return false val s = a?.subString(2) ?: throw IllegalStateException() 在kotlin中return和throw都是表達式,所以可以用在_Elvis operator_操作符右邊 當我們確定一個非null變量不為null,我們可以使用"!!"來強制跳過檢查正常編譯,如: val a: String? = null a!!.subString(2) 當然不推薦經常使用,因為是未經檢驗的存在null指針崩潰的可能。 在android新版本中,我們可以用@Nullable和@NotNull注解來辨別參數是否可以為空或者函數返回是否可以為空。
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的kotlin中学习笔记——null的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin学习笔记——sqlite(a
- 下一篇: kotlin学习笔记——过程控制和Ran