Kotlin-map属性委托

2021-06-23  本文已影响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中

上一篇下一篇

猜你喜欢

热点阅读