美文网首页
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属性委托

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