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
Kotlin优点
1.与java都是基于jvm的虚拟机的可跨平台的动态语言,可以很好的兼容java
2.kt主打的就是消除代码模板
3.丰富的语法糖
4.扩展函数啊什么的