Kotlin實戰(zhàn)學(xué)習(xí)筆記(六 類型)

  1. 可空性

    val x: String? = null //pass
    val x: String = nul //error
    val y: String = x //error
    
    • 安全調(diào)用
    fun toUpper(str: String?) = str?.toUpperCase() 
    toUpper("string") // STRING
    toUpper(null) // null
    obj?.p1?.p2?.p3 //中間有一個為null則為空
    
    • Elvis運算符: ?:
    fun toUpper(str: String?) = str?.toUpperCase() ?: "" //若str是空則返回""
    val result = value?.prop ?: throw Error() //可以拋異常
    
    • 安全轉(zhuǎn)換符: as?
    val result = value as? Type // 若value 不是Type返回null
    val result = value as厉斟?Type ?: return false  //結(jié)合Elvis表達式
    
    • 非空斷言: !! (少用)
    val x: String? = "a" 
    x!!.toUpperCase() //明確告訴編譯器x不是空
    obj!!.x!!.toUpperCase()  //強烈不建議寫法股毫,調(diào)用棧無法跟蹤異常色迂,發(fā)生異常不知道是obj是null還是x是null
    
    • let函數(shù)
    email?.let{ send(it) }
    
    • 延遲初始化的屬性
      對Java依賴注入很有用
      對Activity 在onCreate初始化值及類似的很有用
    class MyService{
        fun performAction(): String = "foo"
    }
    
    ---------------------------------------------------------------
    class MyTest{
        private var myService: MyService? = null //必須初始化值
        @Before fun setUp() {
            myService =  MyService()
        }
        @Test fun testAction() {
            Assert.assertEquals("foo",myService!!.performAction())
        }
    }
    ---------------------------------------------------------------
    class MyTest{
        private lateinit var myService: MyService // 延遲初始化
        @Before fun setUp() {
            myService =  MyService()
        }
        @Test fun testAction() {
            Assert.assertEquals("foo",myService.performAction())
        }
    }
    
    • 可空性的擴展
      像String類的isNullOrBlank落塑,isEmptyOrNull 等方法不用安全調(diào)用
    val input: String? = null
    input.isNullOrBlank() //不用安全調(diào)用
    方法定義如下
    String?.isNullOrBlank() : Boolean = this == null || this.isBlank()
    
    • 類型參數(shù)的Null Safety
    fun <T> printHashCode(t: T) = t?.hashCode() // T == Any?
     fun <T: Any> printHashCode(t: T) = t.hashCode() // T == Any
    
    • Null Safety java-kotlin
      1.@Nullable注解 JSR-305纺阔、Android、JetBrains工具的
      @Nullable + Type = Type?
      @NotNull + Type = Type
      
  2. 平臺類型

public class MyObj {
    private String perporty;

    public MyObj(String perporty) {
        this.perporty = perporty;
    }

    public String getPerporty() {
        return perporty;
    }
}
/*Kotlin*/
//在Kotlin中perporty為平臺類型(不能確定是非空乙濒,還是可空類型)
MyObj(null).perporty.toUpperCase() //java.lang.IllegalStateException: MyObj(null).perporty must not be null ...
MyObj(null).perporty?.toUpperCase() ?: "" //建議處理空

/* important */
繼承也要注意從Java繼承的非空判斷
  1. Java的八大基本數(shù)據(jù)類型對kotlin來說都是非空類型而非平臺類型(int,boolean,short...等不能為null)
  2. kotlin對數(shù)組類型的轉(zhuǎn)換必須是顯式的
  3. Unit類型 ~= void
  4. Nothing類型 P164 沒大看懂
  5. 集合與數(shù)組
  • 可空性集合
    ArrayList<Int?>() 
    ArrayList<Int?>()?
    ArrayList<Int>()?
    
  • 只讀集合和可變集合
    kotlin.collections.Collection //只讀
    kotlin.collections.MutableCollection //可增刪
    創(chuàng)建不可變集合 listOf毁嗦、setOf、mapOf
    創(chuàng)建可變集合 mutableListOf娘纷、mutableSetOf嫁审、mutableMapOf、arrayListOf赖晶、hashSetOf律适、hashMapOf...
    
  • 由于Java沒有可變集合一說,所以在Java的集合當(dāng)做平臺類型(無法區(qū)分可變不可變遏插,可空不可空)
  • Java數(shù)組對應(yīng)kotlin
kotlin的Array 編譯成Java數(shù)組
基本數(shù)據(jù)類型使用像IntArray的特殊類表示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捂贿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胳嘲,更是在濱河造成了極大的恐慌厂僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件了牛,死亡現(xiàn)場離奇詭異颜屠,居然都是意外死亡辰妙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門甫窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來密浑,“玉大人,你說我怎么就攤上這事粗井‰戎溃” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵背传,是天一觀的道長。 經(jīng)常有香客問我台夺,道長径玖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任颤介,我火速辦了婚禮梳星,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滚朵。我一直安慰自己冤灾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布辕近。 她就那樣靜靜地躺著韵吨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪移宅。 梳的紋絲不亂的頭發(fā)上归粉,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音漏峰,去河邊找鬼糠悼。 笑死,一個胖子當(dāng)著我的面吹牛浅乔,可吹牛的內(nèi)容都是我干的倔喂。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼靖苇,長吁一口氣:“原來是場噩夢啊……” “哼席噩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顾复,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤寸潦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朋凉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡给梅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了双揪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片动羽。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渔期,靈堂內(nèi)的尸體忽然破棺而出运吓,到底是詐尸還是另有隱情,我是刑警寧澤疯趟,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布拘哨,位于F島的核電站,受9級特大地震影響信峻,放射性物質(zhì)發(fā)生泄漏倦青。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一盹舞、第九天 我趴在偏房一處隱蔽的房頂上張望产镐。 院中可真熱鬧,春花似錦踢步、人聲如沸癣亚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽述雾。三九已至,卻和暖如春蓬豁,著一層夾襖步出監(jiān)牢的瞬間绰咽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工地粪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留取募,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓蟆技,卻偏偏與公主長得像玩敏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子质礼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法旺聚,類相關(guān)的語法,內(nèi)部類的語法眶蕉,繼承相關(guān)的語法砰粹,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 《Kotin 編程思想·實戰(zhàn)》 《Kotlin極簡教程》正式上架: 點擊這里 > 去京東商城購買閱讀 點擊這里 >...
    光劍書架上的書閱讀 2,086評論 1 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理造挽,服務(wù)發(fā)現(xiàn)碱璃,斷路器弄痹,智...
    卡卡羅2017閱讀 134,714評論 18 139
  • 簡介 AbstractMutableList 是一個超級好用的抽象類,里面實現(xiàn)了好多對集合操作的直觀方法嵌器,新鮮事物...
    坑吭吭閱讀 1,978評論 2 2
  • 我是喜歡劉若英眾多人中的一個肛真,我卻不算是一個真愛粉。因為我沒有聽過她所有的歌爽航,沒有了解過她所有的事情蚓让,沒有看...
    一棵奇思幻想的樹閱讀 194評論 0 0