Properties and Encapsulation
Backing Field
Use field inside a setter to store a normalized value.
field
Inside a custom accessor, `field` refers to the property's backing storage.
Backing Field
BackingField.kt
Replay: real traced execution (multi-file project)
class Label {
var text: String = "ready"
set(value) {
field = value.trim()
}
}
fun main() {
val raw = " done "
val label = Label()
label.text = raw
val clean = label.text
println("clean=$clean")
println("length=${clean.length}")
}
class Label {
var text: String = "ready"
set(value) {
field = value.trim()
}
}
fun main() {
val raw = " next "
val label = Label()
label.text = raw
val clean = label.text
println("clean=$clean")
println("length=${clean.length}")
}
class Label {
var text: String = "ready"
set(value) {
field = value.trim()
}
}
fun main() {
val raw = " ok "
val label = Label()
label.text = raw
val clean = label.text
println("clean=$clean")
println("length=${clean.length}")
}
raw ← done , label.text ← done, clean ← done
8fun main() {9 val raw→ done = " done " //@raw=" next ", " ok "10 val label = Label()11 label.text→ done = raw done 12 val clean→ done = label.textdone1314 println("clean=$cleandone")15 println("length=${clean.length4}")16}outputclean=done length=4
raw ← next , label.text ← next, clean ← next
8fun main() {9 val raw→ next = " next "10 val label = Label()11 label.text→ next = raw next 12 val clean→ next = label.textnext1314 println("clean=$cleannext")15 println("length=${clean.length4}")16}outputclean=next length=4
raw ← ok , label.text ← ok, clean ← ok
8fun main() {9 val raw→ ok = " ok "10 val label = Label()11 label.text→ ok = raw ok 12 val clean→ ok = label.textok1314 println("clean=$cleanok")15 println("length=${clean.length2}")16}outputclean=ok length=2