Kotlin 标准库为几种有用的委托提供了工厂方法。

参考文章

  1. 延迟属性Lazy
val lazyValue: String by lazy {println("computed!")"Hello"
}fun main() {println(lazyValue)println(lazyValue)
}输出
computed!
Hello
Hello
  1. 可观察属性 Observable
import kotlin.properties.Delegatesclass User {var name: String by Delegates.observable("<no name>") {prop, old, new ->println("$old -> $new")}
}fun main() {val user = User()user.name = "first"user.name = "second"
}输出:
<no name> -> first
first -> second

使用vetoable()取代observable()可以用来截获赋值,返回true表示此次有效,返回false表示此次无效
3. 把属性储存在映射中(忽略)

使用委托实现MMKV存储数值
/*** @author  zyl* @date  2020/7/16 10:10 AM*/
class MmkvUtil<T>(val key: String, private val default: T) : ReadWriteProperty<Any?, T> {override fun getValue(thisRef: Any?, property: KProperty<*>): T {return decode(key, default)}override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {encode(key, value)}private fun <U> decode(key: String, default: U): U = with(MMKV.defaultMMKV()) {val res = when (default) {is Int -> decodeInt(key, default)is Long -> decodeLong(key, default)is Float -> decodeFloat(key, default)is Double -> decodeDouble(key, default)is Boolean -> decodeBool(key, default)is String -> decodeString(key, default)is ByteArray -> decodeBytes(key, default)else -> throw IllegalArgumentException("This type can not be exist mmkv")}return@with res as U}private fun <U> encode(key: String, value: U) = with(MMKV.defaultMMKV()) {when (value) {is Int -> encode(key, value)is Long -> encode(key, value)is Float -> encode(key, value)is Double -> encode(key, value)is Boolean -> encode(key, value)is String -> encode(key, value)is ByteArray -> encode(key, value)else -> throw IllegalArgumentException("This type can not be saved into mmkv")}}}使用
val mv by MmkvUtil("key", "")
println("${mv}")
mv = "aaa"
println("${mv}")
mv = "bbb"
println("${mv}")

kotlin的属性委托相关推荐

  1. Kotlin by属性委托

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119939781 本文出自[赵彦军的博客] 文章目录 属性委托要求 委托原理 实战演 ...

  2. kotlin学习笔记——委托属性

    委托属性 kotlin提供了将属性委托到一个类的方法,就是委托属性. 当我们使用属性的get和set方法时,属性委托的getValue和setValue就会被调用. 属性委托的结构如下: class ...

  3. Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系

    标题上写了三个话题, 它们是什么关系呢?by关键字用于属性委托和类委托,而Lazy是属性委托的一种优秀应用. 属性委托 属性的赋值来自定义好的委托类.使用更加简单,只要用关键字by指定委托类,就可以在 ...

  4. [译]带你揭开Kotlin中属性代理和懒加载语法糖衣

    翻译说明: 原标题: How Kotlin's delegated properties and lazy-initialization work 原文地址: https://medium.com/t ...

  5. kotlin获取属性_Kotlin程序获取系统MAC地址

    kotlin获取属性 The task is to get system MAC address. 任务是获取系统MAC地址. package com.includehelp import java. ...

  6. kotlin 覆盖属性_Kotlin程序| 方法覆盖的示例

    kotlin 覆盖属性 方法重载 (Method Overriding) Method overriding allows derived class has the same function na ...

  7. kotlin获取属性_Kotlin程序获取系统名称

    kotlin获取属性 The task is to get the system name. 任务是获取系统名称. package com.includehelp import java.net.In ...

  8. kotlin获取属性_Kotlin程序| 属性获取器和设置器方法的示例

    kotlin获取属性 属性获取器和设置器方法 (Properties Getter and Setter Methods) Variable having a class-level scope, d ...

  9. 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )

    文章目录 I . 属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII . 延 ...

  10. kotlin学习之类委托(八)

    如果我们需要一个集合类,含有MutableCollection的所有功能,并可以修改两个方法,add和addAll,那么我们需要写一个新的类继承MutableCollection,并把一个Mutabl ...

最新文章

  1. Kubernetes 整体架构图
  2. Android开发者指南(5) —— monkeyrunner
  3. 成功解决matplotlib\axes\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been repla
  4. 以太坊2.0客户端Prysm缺陷导致信标链节点共损失15ETH,即将发布更新
  5. Fedora下SAMBA的相关配置
  6. 2017-7-18-每日博客-关于Linux下的通配符.doc
  7. oracle没有正常启动,Oracledbstart无法正常启动处理办法
  8. vc++ 6.0 三次bezier曲线绘制_Python matplotlib绘制散点图
  9. Oracle常见的Hint(二)
  10. 使用Java打开外部程序
  11. 按中文排序List集合
  12. 用matlab实现傅里叶变换,matlab实现傅里叶变换
  13. 2022年天猫618超级红包玩法入口
  14. JS实现中文转拼音首字母和五笔简码
  15. 如何让你的技术团队成员自觉工作
  16. 万物Linux皆可刷安卓,万物皆可Win,开发者成功在安卓手机刷入Win10系统
  17. 漏洞建议:实施 TLS_FALLBACK_SCSV。此外,要么完全禁用 SSLv3,要么禁用以通过 SSLv3 的 CBC 模式操作的所有密码套件
  18. 打计算机游戏用英语怎么说,打游戏用英语怎么说
  19. 关于使用正则表达式进行文本替换
  20. 工作经验|lambada处理集合的常用10种实战骚操作,我都记录下来了

热门文章

  1. Docker 背后的内核知识——cgroups 资源限制
  2. 漫画:什么是二叉堆?
  3. 8 下半部和推后执行的工作
  4. 通讯(transport)
  5. php 父子id,父子关系PHP / MYSQL
  6. Bellman-ford算法、SPFA算法、SPFA判断负环(附例题)
  7. ubuntu修改默认root密码
  8. android 为什么下拉框是dialog形式,基础组件(二) - osc_sd6nmwhn的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. zencart手工备份mysql数据库_MySQL数据库镜像 / 实时备份Zen Cart数据库
  10. android jni示例,Android Jni代码示例讲解