2017-01-13 51 views
5

Ben delegate belgelerine kontrol ettim bir sağlanan temsilci türü map orada bulunan:Kotlin, haritaya ne zaman teslim edileceksiniz?

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

Ama bu gibi delegate olmadan sürümü arasındaki fark nedir çözemedim:

class MutableUser(val map: MutableMap<String, Any?>) { 
    var name: String 
    var age: Int 
} 
delege by map için ortak kullanım

Ve ne?

Teşekkürler!

cevap

5

Fark temsilci ile ilk örnekte, yapmanız gereken tek şey yapıcı ve tamam haritayı koymak olmasıdır.

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

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

Ancak bunun ikinci örneğinizle aynı şekilde çalışması için, özelliklerin haritadan kendiniz sıfırlanmasını uygulamanız gerekir.

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

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

yaygın bir kullanım durumu JSON ayrıştırıcı uygulamak olacaktır.

+3

tersi de çalışır - name', harita buna göre değiştirilir 'değiştirdiğinizde – voddan