美文网首页
Kotlin:代理

Kotlin:代理

作者: 杨殿生 | 来源:发表于2018-08-14 18:25 被阅读0次

类代理

interface Base{
    fun print()
}

class BaseImpl(val x:Int):Base{
    override fun print() {
        println(x)
    }
}

class Derived(var b:Base):Base by b{

    fun printStrong(){
        println("1111")
        b.print()
        println("222222")
    }
}

fun main(array: Array<String>) {
    val b = BaseImpl(1)
    Derived(b).printStrong()
}

在 Derived 的父类列表中的 by 从句会将 b 存储在 Derived 内部对象,并且编译器会生成 Base 的所有方法并转给 b。

代理属性

很多常用属性,虽然我们可以在需要的时候手动实现它们,但更好的办法是一次实现多次使用,并放到库。比如:

延迟属性:只在第一次访问是计算它的值
观察属性:监听者从这获取这个属性更新的通知 在 map 中存储的属性,而不是单独存在分开的字段

class Example{
    var p:String by Delegate()
}

class Delegate {
    operator fun getValue(example: Example, property: KProperty<*>): String {
        println("11111111")
        return "333"
    }

    operator fun setValue(example: Example, property: KProperty<*>, s: String) {
        println("2222222")
    }
}

属性代理不需要任何接口的实现,但必须要提供 get() 方法(如果是变量还需要 set() 方法)

代理属性的要求

只读属性 (val),代理必须提供一个名字叫 get 的方法并接受如下参数:
接收者--必须是相同的,或者是属性拥有者的子类型
元数据--必须是 PropertyMetadata 或这它的子类型
这个函数必须返回同样的类型作为属性。

可变属性 (var),代理必须添加一个叫 set 的函数并接受如下参数:
接受者--与 get() 一样 元数据--与 get() 一样 新值--必须和属性类型一致或是它的字类型

标准代理

kotlin.properties.Delegates 对象是标准库提供的一个工厂方法并提供了很多有用的代理

相关文章

  • 快速上手 Kotlin 开发系列之动态代理

    本节介绍 Kotlin 中没有反射的动态代理。 Java 中的动态代理 在讲 Kotlin 的动态代理之前先简单回...

  • 探究 Kotlin 类代理

    Kotlin 实现类代理是通过 by 关键字,本文尝试讲解类代理在 Kotlin 的具体使用和实现原理。 首先,在...

  • Kotlin:代理

    类代理 在 Derived 的父类列表中的 by 从句会将 b 存储在 Derived 内部对象,并且编译器会生成...

  • Kotlin书写动态代理method.invoke(iam, *

    [TOC] 问题 1.动态代理使用Kotlin书写报错 描述 kotlin书写: 报错在 return metho...

  • Kotlin的独门秘籍Reified实化类型参数(下篇)

    Kotlin系列文章,欢迎查看: 原创系列: 有关Kotlin属性代理你需要知道的一切 浅谈Kotlin中的Seq...

  • 如何正确地使用Kotlin的属性代理

    简述:今天继续Kotlin原创系列的第十一讲,一起来揭开Kotlin属性代理的漂亮外衣。属性代理可以说是Kotli...

  • Kotlin中的委托

    Kotlin中的委托 啥是委托 其实kotlin中的委托的理念就是委托模式也是叫做代理模式;在Kotlin中委托有...

  • 3.接口代理

    接口方法交给代理类实现 关键字 by 其中用kotlin接口代理,SeniorManager可以这样写

  • kotlin学习日记(5)

    kotlin-代理属性(by) 代理模式客户端使用一个代理对象实现对真实对象的访问,代理对象和真实对象实现相同的接...

  • Kotlin by 关键字解读(委托)

    by 就是Kotlin 帮我们实现代理模式的捷径。by可以实现两种代理,一种是接口代理,一种是属性代理。 首先看接...

网友评论

      本文标题:Kotlin:代理

      本文链接:https://www.haomeiwen.com/subject/xnnvbftx.html