Kotlin

134 阅读1分钟

by委托

详解

类委托

class DelegateGamePlayer(private val player: IGamePlayer): IGamePlayer by player

// Client 场景测试
fun main() { 
    val realGamePlayer = RealGamePlayer("张三") 
    val delegateGamePlayer = DelegateGamePlayer(realGamePlayer) 
    delegateGamePlayer.rank() 
    delegateGamePlayer.upgrade()
}

 

属性委托

interface ReadOnlyProperty<in R, out T> { 
    operator fun getValue(thisRef: R, property: KProperty<*>): T 
} 
interface ReadWriteProperty<in R, T> { 
    operator fun getValue(thisRef: R, property: KProperty<*>): T
    operator fun setValue(thisRef: R, property: KProperty<*>, value: T)
}

// val 属性委托实现
class Delegate1: ReadOnlyProperty<Any,String>{ 
    override fun getValue(thisRef: Any, property: KProperty<*>): String {
        return "通过实现ReadOnlyProperty实现,name:${property.name}" 
                } 
} // var 属性委托实现 

class Delegate2: ReadWriteProperty<Any,Int>{ 
override fun getValue(thisRef: Any, property: KProperty<*>): Int {
       return 20 
} 
override fun setValue(thisRef: Any, property: KProperty<*>, value: Int) { 
       println("委托属性为: ${property.name} 委托值为: $value")
}
} // 测试 class 

Test {
// 属性委托
val d1: String by Delegate1()
var d2: Int by Delegate2() 
}

Kt与Java互相调用

详解

Kt语法糖

详解

Kt Flow

冷流热流

flow常用操作符

java与kt相互调用

扩展函数与属性的使用

Kotlin优点

1.与java都是基于jvm的虚拟机的可跨平台的动态语言,可以很好的兼容java

2.kt主打的就是消除代码模板

3.丰富的语法糖

4.扩展函数啊什么的