Kevin Learn Kotlin:委托

Posted Kevin_小飞象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kevin Learn Kotlin:委托相关的知识,希望对你有一定的参考价值。

Kotlin 通过关键字 by 实现委托。

类委托

类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。

fun main() 
    val b = BaseImpl(20)
    Derived(b).print()


// 创建接口
interface Base 
    fun print()


// 实现此接口的被委托的类
class BaseImpl(val x: Int) : Base 
    override fun print() 
        print(x)
    


// 通过关键字 by 建立委托类
class Derived(b: Base) : Base by b

输出结果:

20

属性委托

属性委托指的是一个类的某个属性值不是在类中直接进行定义,而是将其托付给一个代理类,从而实现对该类的属性统一管理。

val/var <属性名>: <类型> by <表达式>
  • var/val:属性类型(可变/只读)
  • 属性名:属性名称
  • 类型:属性的数据类型
  • 表达式:委托代理类
fun main() 
    val e = Example()
    println(e.p)

    e.p = "Kevin"
    println(e.p)


class Example 
    var p: String by Delegate()


// 委托的类
class Delegate 
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String 
        return "$thisRef, 这里委托了 $property.name 属性"
    

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) 
        println("$thisRef$property.name 属性赋值为 $value")
    

输出结果:

Example@246b179d, 这里委托了 p 属性
Example@246b179d 的 p 属性赋值为 Kevin
Example@246b179d, 这里委托了 p 属性

以上是关于Kevin Learn Kotlin:委托的主要内容,如果未能解决你的问题,请参考以下文章

Kevin Learn Kotlin-->Kotlin 知识梳理

Kevin Learn Kotlin:泛型

Kevin Learn Kotlin:案例四则运算

Kevin Learn Kotlin-->Kotlin 学习资料

Kevin Learn Kotlin:类对象和接口

Kevin Learn Kotlin:Java & Kotlin