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的名字要与类中的属性名字保持一致,如果不一致会怎么样,试试:
目前都是给只读属性进行了委托:
那如果是读写属性,它又是如何来委托给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中