Kotlin provê o Delegation pattern por padrão na linguagem, nessa apresentação aprenderemos o conceito de Delegation, o que é Delegation properties e como extrair todo o potencial dessa feature do Kotlin.
operator fun getValue(ref: Any?, prop: KProperty<*>): String { println("valor '$value' de '${prop.name}'sendo entregue para $ref") return name } operator fun setValue(ref: Any?, prop: KProperty<*>, value: String) { println("’$value’ atribuido à ‘${prop.name}’ em $ref.'") name = value } } val name: String by NameDelegate()
operator fun getValue(ref: Any?, prop: KProperty<*>): String { println("valor '$value' de '${prop.name}'sendo entregue para $ref") return name } operator fun setValue(ref: Any?, prop: KProperty<*>, value: String) { println("’$value’ atribuido à ‘${prop.name}’ em $ref.'") name = value } } val name: String by NameDelegate()
operator fun getValue(ref: Any?, prop: KProperty<*>): String { println("valor '$value' de '${prop.name}'sendo entregue para $ref") return name } operator fun setValue(ref: Any?, prop: KProperty<*>, value: String) { println("’$value’ atribuido à ‘${prop.name}’ em $ref.'") name = value } } var name: String by NameDelegate()
var name: String = "Felipe" override fun getValue(ref: Any?, prop: KProperty<*>): String { println("valor '$value' de '${prop.name}'sendo entregue para $ref") return name } override fun setValue(ref: Any?, prop: KProperty<*>, value: String) { println("’$value’ atribuido à ‘${prop.name}’ em $ref.'") name = value } } val name: String by NameDelegate()
map: Map<String, Any?>) { val name: String by map val age: Int by map } val user = User(mapOf( "name" to "John Doe", "age" to 25 )) println("Name: ${user.name}, Age: ${user.age}")
map: Map<String, Any?>) { val name: String by map val age: Int by map } val user = User(mapOf( "name" to "John Doe", "age" to 25 )) println("Name: ${user.name}, Age: ${user.age}") Output: Name: John Doe, Age: 25
{ var name by stringPref() var code by nullableStringPref() var age by intPref(default = 14) var highScore by longPref() var rate by floatPref() val prizes by stringSetPref { val set = TreeSet<String>() set.add( "Beginner") set } } UserInfo.name = "User" UserInfo.code = "Test"