構(gòu)造器優(yōu)化
主構(gòu)造器放在類名后面
LessonViewHolder constructor(item: View)
繼承父類并重寫(xiě)
super
方法可以:LessonViewHolder constructor(item: View) : ViewHolder(item)
萍膛。-
寫(xiě)成主構(gòu)造器的時(shí)候,可以在
init
代碼塊中初始化屬性携栋。類執(zhí)行屬性的時(shí)候,會(huì)根據(jù)先后順序運(yùn)行令杈,如果初始化操作在
init
之后叔汁,而init
代碼塊里面又用到了那個(gè)屬性孙援,就會(huì)編譯報(bào)錯(cuò),初始化操作要在init
之前膳灶。 如果有主構(gòu)造器的時(shí)候咱士,次級(jí)構(gòu)造器要先實(shí)現(xiàn)主構(gòu)造器。
在主構(gòu)造器中加上
var
或者val
關(guān)鍵表示會(huì)創(chuàng)建var
或者val
的屬性轧钓,省去了初始化操作序厉。創(chuàng)建數(shù)據(jù)類可以使用data關(guān)鍵字,
kotlin
自動(dòng)完成了數(shù)據(jù)類的equels
毕箍,toString
弛房,copy
,hashcode
函數(shù)而柑。
解構(gòu)
data class Response(var code: Int, var message: String)
fun getResponse(): Response{
return Response(1, "ss")
}
val (code, message) = getResponse()
判斷是否是null
文捶,并設(shè)置默認(rèn)值
val data = lesson.data ?: "日期待定"
如果
lesson.data
是null
的時(shí)候荷逞,就會(huì)指定一個(gè)日期待定
的默認(rèn)值
判斷是否是null
,并且長(zhǎng)度大于4
:
if (user.name?.length ?: 0 < 4)
如果user.name
是null
粹排,那么user.name.length
是null
种远,就會(huì)返回0,否則返回user.name.length
顽耳。然后和4
比較坠敷。
遍歷集合和循環(huán)
val list = ArrayList<String>()
for (str in list){
}
list.forEach({str: String ->
})
在
kotlin
中如果參數(shù)的最后一個(gè)參數(shù)是lamda
形式,那么可以把lamda
的表達(dá)式挪到外面射富。如果參數(shù)只有一個(gè)lamda
表達(dá)式膝迎,也可以把()
給省略掉。
list.forEach(){
str: String -> {
}
}
list.forEach{
str: String -> {
}
}
如果在
kotlin
的lamda
表達(dá)式中胰耗,如果lamda
的傳入?yún)?shù)只有一個(gè)限次,那么也可以把參數(shù)給省略掉:
list.forEach{
it -> {
}
}
如果遍歷集合的時(shí)候,需要條件判斷柴灯,也可以用到filter
表達(dá)式:
val newList = list.filter{ it == ”xxx“ }
循環(huán)
遍歷輸入0
到99
:
repeat (100){
println(it)
}
kotlin
中也有java
的for i
循環(huán)
for (i in 0 until list.size){
}
也可以利用
list.indices
返回一個(gè)區(qū)間的形式遍歷
for (i in list.indices){
}
設(shè)置var
屬性的set
方法是private
companion object {
lateinit var currentApplication: Context
private set
}
在kotlin
中如果一行代碼返回的情況卖漫,可以直接返回
fun get(key: String?): String? = SP.getString(key, null)
設(shè)置函數(shù)參數(shù)默認(rèn)值:
如果傳入單參數(shù),則使用默認(rèn)值:
fun toast(message: String, dur: Int = 2){
}
為任意一個(gè)類擴(kuò)展添加指定函數(shù)
fun dp2px(dp: Float): Float {
}
fun Float.dp2px(): Float{
}
val width = 6f.dp2px
因?yàn)閭魅氲谋旧硪彩?code>Float赠群,所以傳入?yún)?shù)也不需要了懊亡。
也可以為任意一個(gè)類添加成員屬性:
val ViewGroup.firstChild: View
get() = getChildAt(0)
viewGroup.firstChild