Kotlin 筆記

1、val 只讀不能被修改 var 可以
2、let/also/with/run/apply/repeat 一看就會(huì)

1704638876507.jpg

內(nèi)置函數(shù)的總結(jié):
apply使用場(chǎng)景:當(dāng)你需要初始化一個(gè)對(duì)象或配置對(duì)象屬性時(shí)。
also使用場(chǎng)景:當(dāng)你想要執(zhí)行一些副作用操作(比如打印日志),但不改變對(duì)象本身或不關(guān)心返回值時(shí)。。
run使用場(chǎng)景:當(dāng)你想在一個(gè)對(duì)象的上下文中執(zhí)行一系列操作,并返回最后一個(gè)表達(dá)式的值時(shí)。。
let使用場(chǎng)景:當(dāng)你需要在一個(gè)表達(dá)式中使用一個(gè)對(duì)象并希望返回處理后的結(jié)果時(shí)。
with使用場(chǎng)景:當(dāng)你已經(jīng)有一個(gè)對(duì)象實(shí)例,并且想要在這個(gè)對(duì)象上執(zhí)行多個(gè)操作時(shí)。
let和also:
明確一個(gè)變量所處特定的作用域范圍內(nèi)可使用。
針對(duì)一個(gè)可null的對(duì)象統(tǒng)一做判空處理。(重要)
3、學(xué)習(xí)筆記
4、copy函數(shù)只管主構(gòu)造函數(shù),不管次構(gòu)造函數(shù)
5、空值和空類(lèi)型

fun main() {
  var str: String? = null
    //如果對(duì)象的屬性為null則安全調(diào)用運(yùn)算符返回null
    println(str?.length)
    //使用非空斷言操作符!!.來(lái)明確不會(huì)出現(xiàn)null問(wèn)題
    println(str!!.length)

    val str: String? = null
    //Elvis運(yùn)算符 ?: 左側(cè)為空值檢測(cè)目標(biāo),右側(cè)為檢測(cè)到null時(shí)返回的結(jié)果
    val len: Int = str?.length ?: 0
}

6、takeIf關(guān)鍵字如果是括號(hào){}內(nèi)最后一行執(zhí)行返回的是true,則返回的自身it?
如果是括號(hào){}內(nèi)最后一行執(zhí)行返回的是false,則返回的自身null
takeUnless與takeif作用完全相反

fun CheckMyTakeIf(value :Boolean):Boolean = value
fun main() {
    var name: String? = "你好"
    var lll = name.takeIf {
        CheckMyTakeIf(true)
        CheckMyTakeIf(false)
    }//最后返回false,所以返回空nu11
    println(111)
    lll = name.takeIf {
        CheckMyTakeIf(false)
        CheckMyTakeIf(true)
    }//最后返回ture,所以返回自身,自身就是name字符串
    println(111)
}

7、伴生對(duì)象companion的由來(lái): 在KT中是沒(méi)有Java的這種static靜態(tài),伴生很大程度上和Java的這種static靜態(tài)差不多,我們的伴生對(duì)象只有一次加載伴生對(duì)象只會(huì)初始化一次。
8、內(nèi)部類(lèi)可以是嵌套類(lèi),Kotlin 的默認(rèn)形式內(nèi)部不能訪問(wèn)外部,要想訪問(wèn),需要額外添加一個(gè) inner 關(guān)鍵字。
9、使用copy函數(shù)的時(shí)候,由于內(nèi)部代碼只處理主構(gòu)造不管次構(gòu)造,所以必須考慮次構(gòu)造的內(nèi)容

data class KtBase92(var name: String, var age: Int) {
    var coreInfo: String = ""
    init {
        println("主構(gòu)造被調(diào)用了")//copy函數(shù)只走這里
    }
    // 次構(gòu)造
    constructor(name: String) : this(name, 99) {
        println("次構(gòu)造被調(diào)用")//copy函數(shù)不會(huì)走這里
        coreInfo = "增加非常核心的內(nèi)容信息"
    }
}

10、數(shù)據(jù)類(lèi)data不能使用 abstract,open,sealed,inner 等等 修飾
11、泛型約束Personclass本身與Personclass的所有子類(lèi) 都可以使用,|其他的類(lèi),都不能兼容此泛型

open class MyAnyclass(name:String)//祖宗類(lèi) 頂級(jí)父類(lèi)
open class Personclass(name:String):MyAnyclass(name = name)//父類(lèi)
class Studentclass(name:String):Personclass(name = name)//子類(lèi)
class Dogclass(name:String)//其他類(lèi)另類(lèi)
//相當(dāng)于Java的T extends PersonClass
// T:PersonClass//Personclass本身與Personclass的所有子類(lèi) 都可以使用,|其他的類(lèi),都不能兼容此泛型
class KtBase106<T : Personclass> (private val inputTypeValue: T, private val isR: Boolean = true) {
//    /萬(wàn)能對(duì)象返回器
  fun getobj()= inputTypeValue.takeIf{ isR }
}

12、如果泛型類(lèi)型T的參數(shù)是vararg 可變參數(shù),則在接收可變參數(shù)時(shí),可以傳入多個(gè) 指定類(lèi)型的實(shí)例對(duì)象,需要使用Array<out T>類(lèi)型的變量進(jìn)行接收;
實(shí)例對(duì)象以[]運(yùn)算符獲取其items:Array<out T>中的某個(gè)元素,則需要重寫(xiě)該類(lèi)的get方法;
13、當(dāng)我們 對(duì)這個(gè)整個(gè)類(lèi)里面的泛型,只能給讀取 ,不能修改更改,可以聲明 out T 協(xié)變
當(dāng)我們 對(duì)這個(gè)整個(gè)類(lèi)里面的泛型,只能修改,不能讓外界讀取時(shí),可以聲明 in T逆變
out 相當(dāng)于java里面的 <? extend>
in 相當(dāng)于java里面的 <? super>
如果一個(gè)類(lèi)既要參數(shù)泛型又要獲取返回的泛型就不適用in & out

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Kotlin筆記 要理解Java與Kotlin的區(qū)別,就要從最根本的上來(lái)理解。Java是解釋型語(yǔ)言(邊解釋成二進(jìn)制...
    FFFSnow閱讀 1,176評(píng)論 0 0
  • 一、Kotlin基礎(chǔ) 1.1 變量 在Kotlin中變量分為可變引用var和不可變引用val,val對(duì)應(yīng)的是jav...
    東方未曦閱讀 605評(píng)論 0 1
  • Kotlin與Java的差異 1. 對(duì)象的初始化時(shí)的順序 在java中,初始化代碼塊 -> 構(gòu)造函數(shù) 在kotli...
    HWilliamgo閱讀 654評(píng)論 0 0
  • Sealed Class 密封類(lèi)如果想對(duì)能夠創(chuàng)建出的子類(lèi)做限制,可以使用密封類(lèi)。 下面一個(gè)例子是沒(méi)有使用密封類(lèi)的:...
    易含閱讀 666評(píng)論 0 0
  • 函數(shù) kotlin 函數(shù)以fun來(lái)標(biāo)識(shí),使用方式和java一樣,同一類(lèi)使用直接調(diào)用,如果是通過(guò)類(lèi)引用則使用 '類(lèi)名...
    金館長(zhǎng)說(shuō)閱讀 246評(píng)論 0 0

友情鏈接更多精彩內(nèi)容