Kotlin学习笔记(2)- 空安全
系列文章全部為本人的學習筆記,若有任何不妥之處,隨時歡迎拍磚指正。如果你覺得我的文章對你有用,歡迎關注我,我們一起學習進步!kotlin學習筆記系列首發簡書和CSDN
Kotlin學習筆記(1)- 環境配置
Kotlin學習筆記(2)- 空安全
Kotlin學習筆記(3)- 語法
Kotlin學習筆記(4)- 流程控制
Kotlin學習筆記(5)- 類
Kotlin學習筆記(6)- 屬性
Kotlin學習筆記(7)- 接口
Kotlin學習筆記(8)- 擴展
Kotlin學習筆記(8)- 擴展(續)
Kotlin學習筆記(9)- 數據類
Kotlin學習筆記(10)- 泛型
Kotlin學習筆記(11)- 內部類和嵌套類
Kotlin學習筆記(12)- 委托
kotlin中很大的一個特點就是null安全,在java中需要到處處理的空判斷帶來的代碼層次深,以及沒處理好空判斷帶來的空指針異常NullPointerExecption,在這里能得到很好的解決。kotlin通過?將是否允許為空分割開來,比如str:String為不能空,加上?后的str:String?為允許空,通過這種方式,將本是不能確定的變量人為的加入了限制條件。而不符合條件的輸入,則會在IDE上顯示編譯錯誤而無法執行。
var value1 : String = "abc" value1 = null // 編譯不錯誤var value2 : String? = "abc" value2 = null // 編譯能通過在對變量進行操作時,如果變量是可能為空的,那么將不能直接調用,因為編譯器不知道你的變量是否為空,所以編譯器就要求你一定要對變量進行判斷
var str : String? = null str.length // 編譯不錯誤 str?.length // 編譯能通過那么問題來了,我們知道在java中String.length返回的是int,上面的str?.length既然編譯通過了,那么它返回了什么?我們可以這么寫:
var result = str?.length這么寫編譯器是能通過的,那么result的類型是什么呢?在kotlin中,編譯器會自動根據結果判斷變量的類型,翻譯成普通代碼如下:
if(str == null)result = null; // 這里result為一個引用類型 elseresult = str.length; // 這里result為Int那么如果我們需要的就是一個Int的結果(事實上大部分情況都是如此),那又該怎么辦呢?在kotlin中除了?表示可為空以外,還有一個新的符號:雙感嘆號!!,表示一定不能為空。所以上面的例子,如果要對result進行操作,可以這么寫:
var str : String? = null var result : Int = str!!.length這樣的話,就能保證result的數據類型,但是這樣還有一個問題,那就是str的定義是可為空的,上面的代碼中,str就是空,這時候下面的操作雖然不會報編譯異常,但是運行時就會見到我們熟悉的空指針異常NullPointerExectpion,這顯然不是我們希望見到的,也不是kotlin愿意見到的。java中的三元操作符大家應該都很熟悉了,kotlin中也有類似的,它很好的解決了剛剛說到的問題。在kotlin中,三元操作符是?:,寫起來也比java要方便一些。
var str : String? = null var result = str?.length ?: -1 //等價于 var result : Int = if(str != null) str.length else -1小結:
寫在最后:
今天陪媳婦出去逛,獻出了自己的第一次——被馬蜂蜇。夏天到了,朋友們出去玩,尤其是公園之類綠植茂盛的地方,一定要做好防蚊蟲工作,雖然城市里不會出現太有毒性的蚊蟲,但是誰也不喜歡被打擾到出去游玩的心情吧~
謹以最后幾句紀念一下我此刻腫起的胳膊,晚安,Kotlin!
總結
以上是生活随笔為你收集整理的Kotlin学习笔记(2)- 空安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin学习笔记(1)- 环境配置
- 下一篇: Kotlin学习笔记(3)- 语法