Kotlin學(xué)習(xí)筆記:類型系統(tǒng)

Kotlin學(xué)習(xí)筆記:概述
Kotlin學(xué)習(xí)筆記:基本語法和函數(shù)
Kotlin學(xué)習(xí)筆記:類和接口
Kotlin學(xué)習(xí)筆記:lambda編程
Kotlin學(xué)習(xí)筆記:類型系統(tǒng)
Kotlin學(xué)習(xí)筆記:泛型
Kotlin學(xué)習(xí)筆記:注解和反射

Null 類型處理

Kotlin類型系統(tǒng)解決了空指針問題。解決方式是將運行時的錯誤轉(zhuǎn)變成編譯時錯誤溢豆。

在Kotlin中尚蝌,默認情況下鞋屈,變量不能存儲null引用旺韭,否則編譯時報錯胶坠。

fun strLen(s: String) = s.length
strLen(null) //編譯不通過
  • 可null操作符(?)

若需要變量為null挂谍,可以使用叔壤?操作符。一旦有一個可null類型的值口叙,對它的操作也會受限制炼绘。

不能把它賦值給非null類型的對象

val str:String? = null
val str2:String = str // 編譯不通過

也不能把可null類型的對象傳給擁有非null類型參數(shù)的函數(shù)。

val str: String? = null
strLen(str) // 編譯不通過

如果一定要調(diào)用strLen方法庐扫,需要將方法進行null處理

fun strLen2(s:String?):Int = if (s!=null) s.length else 0
val str: String? = null
strLen(str) // 正常運行饭望,返回0
  • 安全調(diào)用運算符(?.)

安全調(diào)用運算符允許把一次null檢查和一次方法調(diào)用合并成一個操作。

例如

str?.toUpperCase()

等價于

if (str != null) str.toUpperCase() else null
  • Elvis運算符(?:)

elvis 接收兩個運算數(shù)形庭,如果第一個運算數(shù)不為null铅辞,則返回第一個運算數(shù);如果為null萨醒,則返回第二個運算數(shù)斟珊。

image.png
  • 安全轉(zhuǎn)換(as?)
image.png
  • 非null斷言(!!)
image.png
  • let函數(shù)

let函數(shù)可以用于處理可null表達式,它允許對表達式進行求值富纸,并判斷它是否為null囤踩。

舉例

有一個發(fā)送郵件的函數(shù)

fun sendEmailTo(email: String) { /*...*/ }

調(diào)用發(fā)送郵件函數(shù)。由于email可以為null晓褪,編譯不能通過堵漱。

>>> val email: String? = ...
>>> sendEmailTo(email)
ERROR: Type mismatch: inferred type is String? but String was expected

可以進行null判斷

if (email != null) sendEmailTo(email)

也可以使用let函數(shù)

email?.let { email -> sendEmailTo(email) }
image.png

基本類型

與Java不同,Kotlin不區(qū)分基本數(shù)據(jù)類型和引用類型涣仿。在大多數(shù)情況下勤庐,Int類型會被編譯為java的int類型示惊。在一些情況下,比如作為泛型的類型參數(shù)時愉镰,會被編譯為Java的Integer類型米罚。

對應(yīng)到Java基本類型的類型完整列表如下:

整數(shù)類型—Byte, Short, Int, Long
浮點數(shù)類型—Float, Double
字符類型—Char
布爾類型—Boolean

  • Any:Any類型是所有類型的父類,類似于Java的Object
  • Unit:類似于Java的void丈探。
  • Nothing:沒有任何值录择,只有被當做返回值使用或者當做泛型函數(shù)返回值的類型參數(shù)

集合

Kotlin 沒有實現(xiàn)自己的集合框架,而是使用的Java的集合框架 碗降。因此隘竭,本質(zhì)上每一個Kotlin集合接口都對應(yīng)著一個Java集合接口的實例。

與Java不同的是遗锣,Kotlin的集合分為兩種货裹,一種是只讀集合,一種是可變集合精偿。

集合創(chuàng)建函數(shù)列表

集合類型 只讀 可變
List listOf() arrayListOf()
Set setOf hashSetOf(), linkedSetOf(), sortedSetOf()
Map mapOf hashMapOf(), linkedMapOf(), sortedMapOf()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弧圆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笔咽,更是在濱河造成了極大的恐慌搔预,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叶组,死亡現(xiàn)場離奇詭異拯田,居然都是意外死亡,警方通過查閱死者的電腦和手機甩十,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門船庇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侣监,你說我怎么就攤上這事鸭轮。” “怎么了橄霉?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵窃爷,是天一觀的道長。 經(jīng)常有香客問我姓蜂,道長按厘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任钱慢,我火速辦了婚禮逮京,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘束莫。我一直安慰自己懒棉,他們只是感情好御吞,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漓藕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挟裂。 梳的紋絲不亂的頭發(fā)上享钞,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音诀蓉,去河邊找鬼栗竖。 笑死,一個胖子當著我的面吹牛渠啤,可吹牛的內(nèi)容都是我干的狐肢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼沥曹,長吁一口氣:“原來是場噩夢啊……” “哼份名!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妓美,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤僵腺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壶栋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辰如,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年贵试,在試婚紗的時候發(fā)現(xiàn)自己被綠了琉兜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毙玻,死狀恐怖豌蟋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淆珊,我是刑警寧澤夺饲,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站施符,受9級特大地震影響往声,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戳吝,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一浩销、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧听哭,春花似錦慢洋、人聲如沸塘雳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽败明。三九已至,卻和暖如春太防,著一層夾襖步出監(jiān)牢的瞬間妻顶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工蜒车, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讳嘱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓酿愧,卻偏偏與公主長得像沥潭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嬉挡,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容