美文网首页
Kotlin-map属性委托

Kotlin-map属性委托

作者: 蒋斌文 | 来源:发表于2021-06-23 19:16 被阅读0次

Kotlin-map属性委托

委托属性在实际开发中是有如下4种使用情况的

1、延迟属性。

2、可观测属性。

3、非空属性。

4、map属性。

map属性委托这是最后一种属性委托,map属性委托它是将属性存储到map中,一种常见的应用场景是将属性值存储到map当中。这通常出现在JSON解析或者一些动态行为。在这种情况中,你可以将map实例作为委托,作为类中属性的委托。

/*
    map委托

    将属性存储到map中

    一种常见的应用场景是将属性值存储到map当中。
    这通常出现在JSON解析或是一些动态行为。
    在这种情况中,你可以将map实例作为委托,作为类中属性的委托。

    map中key的名字要与类中的属性名字保持一致
 */

class Student(map: Map<String, Any?>) {

    val name: String by map

    val address: String by map

    val age: Int by map

    val birthday: Date by map
}

接下来调用一下,这里需要构造一个Map对象,得用到一个mapof()函数,不过它的使用跟Java是有点区别的,具体如下

fun main(args: Array<String>) {
    val student = Student(mapOf(
            "name" to "zhangsan",
            "address" to "beijing",
            "age" to 20,
            "birthday" to Date()
    ))

    println(student.name)
    println(student.address)
    println(student.age)
    println(student.birthday)

    println("-----")
}

RUN> 🏂🏂🏂🏂🚣🚣🚣🚣🚣

zhangsan
beijing
20
Wed Jun 23 19:10:02 CST 2021
-----

注意:map中的key的名字要与类中的属性名字保持一致,如果不一致会怎么样,试试:

image-20210623191132337

目前都是给只读属性进行了委托:

image-20210623191219583

那如果是读写属性,它又是如何来委托给map的呢?其实另外还有一个读写的map,下面使用一下:

class Student2(map: MutableMap<String, Any?>) {

    var address: String by map
}
fun main(args: Array<String>) {

    val map: MutableMap<String, Any?> = mutableMapOf(
            "address" to "beijing"
    )

    val student2 = Student2(map)

    println(map["address"])
    println(student2.address)

    println("------")

    student2.address = "shanghai"

    println(map["address"])
    println(student2.address)
}

RUN> 🏄🏄🏄🚣🚣🚣🚣

beijing
beijing
------
shanghai
shanghai

读写属性的委托既可一读,也能写,最终都会体现到map中

相关文章

  • Kotlin-map属性委托

    Kotlin-map属性委托 委托属性在实际开发中是有如下4种使用情况的 1、延迟属性。 2、可观测属性。 3、非...

  • Kotlin-委托,是否被低估了?

    1、属性委托 kotlin中的委托主要分为类的委托和属性的委托,我们先重点来看属性委托,用的比较多。 标准委托 k...

  • Kotlin学习笔记(2)Kotlin委托代码示例

    1,class委托 2,属性委托

  • 委托属性

    场景:有一些属性,在需要的时候才创建。并且只实现一次。延迟属性:首次访问时计算可观察属性:监听器收到有关此属性变量...

  • Kotlin-委托剖析(2)- 属性委托

    简单例子 以下是属性委托的代码, 属性b委托给了属性a,a、b两者数据同步。Tips:可空属性好像不能成为委托对象...

  • iOS学习笔记:添加delegate

    1、委托者添加代理. 2、委托者申明一个属性:委托者里得有一个属性代表被委托者, 注意这个属性是弱引用. 3、被委...

  • 运算符重载 高阶函数

    委托属性class Foo{var p:Type by Delegate()} 使用委托属性: 惰性初始化 和 b...

  • Kotlin | 委托(Delegation)详解

    本文要点概述 辨析委托模式与代理模式 接口委托(Delegated interface) 属性委托(Delegat...

  • Kotlin的委托属性

    委托属性的语法 val/var <属性名>:<类型> by <表达式>在by后面的表达式是改委托,因为属性对应的g...

  • kotlin—委托属性及其原理

    不仅类可以使用委托,属性也可以使用委托,本章节我们介绍委托属性及其实现原理 1、语法 语法如下:var/val p...

网友评论

      本文标题:Kotlin-map属性委托

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