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
INotifyPropertyChange
interface 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...