kotlin之好用的Delegates实现双击back退出

简介

说Delegates之前,首先必须了解下kotlin的委托机制,这个委托机制还是很不错的,可以将一个对象的构造和设置值,都给委托给其它

委托机制

关键词by,是不是很眼熟,这不是我们经常用过的by lazy{} ,没错懒加载就是用委托实现的

自定义委托

考大家一个问题valvar有啥区别吗?val是不可变的变量,必须要在初始化化的时候赋值。var是可变的变量。有没有考虑过为啥呢?

// 其实每个变量都有一个隐藏的方法,如果是val变量修饰,只有get方法
    val name: String = ""
        get() {
   
           return field
        }

// var 有get方法和set方法,当你给name2进行赋值的时候,set方法就会调用
    var name2: String = ""
        get() {
   
         return field
        }
        set(value) {
   

        }

来尝试来一个定义一个委托:

这里描述下,我现在是val定义变量,只需要ReadOnlyProperty(只需要要委托getValue方法),我定义了一个value变量记录值(初始化内容123),当使用这个变量的读取这个值的时候,就会调用我的委托方法

    val name: String by object : ReadOnlyProperty<Any?, String> {
   
        var value: String = "123"
        override fun getValue(thisRef: Any?, property: KProperty<*>): String {
   
            println("取这个[${property.name}]属性赋值:$value")
            // 返回这个记录值
            return value
        }
    }
// 同理var的委托定义,如果我这样写,当使用这个变量的读取这个值的时候,就会调用我的委托方法。当我设置值的时候就会调用我的set方法,会传入一个value方法。
var name2: String by object : ReadWriteProperty<Any?, String> {
   
        var value: String = "123"
        override fun getValue(thisRef: Any?, property: KProperty<*>): String {
   
            println("取这个[${property.name}]属性赋值:$value")
            // 返回这个记录值
            return value
        }

        override fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
   
            println("为这个[${property.name}]属性赋值:$value")
            // 记录下当前这个值
            this.value <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值