2017-01-13 72 views
5

我查了delegate的文檔,我發現有一個提供委託類型mapKotlin,什麼時候通過地圖進行委託?

class MutableUser(val map: MutableMap<String, Any?>) { 
    var name: String by map 
    var age: Int  by map 
} 

但我無法弄清楚什麼是版本之間的差異不delegate,像這樣:

class MutableUser(val map: MutableMap<String, Any?>) { 
    var name: String 
    var age: Int 
} 

代表by map的常見用法是什麼?

謝謝!

回答

5

不同之處在於,在委託的第一個示例中,您只需將映射放入構造函數並完成。

val user = MutableUser(mutableMapOf(
     "name" to "John Doe", 
     "age" to 25 
)) 

println(user.name) // Prints "John Doe" 
println(user.age) // Prints 25 

但這個工作同你的第二個例子,你必須實現從地圖上自己的屬性初始化。

class MutableUser(val map: MutableMap<String, Any?>) { 
    var name: String 
    var age: Int 

    init { 
     name = map["name"].toString() 
     age = map["age"].toString().toInt() 
    } 
} 

一個常見的用例是實現JSON解析器。

+3

其他的方式也工作 - 當你修改'name',地圖上相應修改 – voddan

相關問題