Delegated properties
Kotlin enhances the concept of properties to promote code reuse and make the developer coding task easier. There are many repetitive code snippets you and I could write. Ideally, we should have the following functionality out-of-the-box:
A property value should be computed lazily on its first ever access.
Notify the listeners of a change to one of the values of properties. Have you ever coded in C#? If yes, I am sure the
INotifyPropertyChangeinterface will come to mind.Use a map to store your fields rather than a materialized field.
Well, good news! Kotlin's delegate properties support all of these. We deal quite often with types for which we need an identifier:
interface WithId {
val id: String
}
data class WithIdImpl(override val id: String) : WithId
class Record(id: String) : WithId by Record.identifier(id) {
companion object Record {
fun identifier(identifier: String) = WithIdImpl...