import kotlin.reflect.KProperty
fun main(args : Array<String>){
val animal = Animal()
animal.name = "okee"
println("Nama Hewan: ${animal.name}")
val person = Person()
person.name = "Habib"
println("Nama Orang: ${person.name}")
val hero = Hero()
hero.name = "GatotKaca"
println("Nama Pahlawan: ${hero.name}")
}
class DelegateName{
private var value: String = "Default"
operator fun getValue(classRef: Any?, property: KProperty<*>): String{
println("Fungsi ini sama sepertu getter untuk properti ${property.name} pada $classRef")
return value
}
operator fun setValue(classRef: Any?, property: KProperty<*>, newValue: String){
println("Fungsi ini sama seperti setter untuk property ${property.name} pada class $classRef")
println("Nilai ${property.name} dari : $value akan berubah menjadi $newValue")
value = newValue
}
}
class Animal{
var name: String by DelegateName()
}
class Person{
var name: String by DelegateName()
}
class Hero{
var name: String by DelegateName()
}