Chapter 8. Kotlin Delegates

This chapter talks about delegates in Kotlin. You’ll learn how to use delegates in the standard library, including lazy, observable, vetoable, and notNull, as well as create your own. Class delegates let you replace inheritance with composition, and property delegates replace the getters and setters for a property with those from another class.

In addition to the basic demonstrations, this chapter also shows how some of the standard delegates are implemented in the library, as examples of good idiomatic usage.

8.1 Implementing Composition by Delegation


You want to create a class that contains instances of other classes and delegate behavior to them.


Create interfaces that contain the delegation methods, implement them in classes, and build the wrapper class out of them using the keyword by.


Modern object-oriented design tends to favor composition rather than inheritance1 as a way to add functionality without strong coupling. In Kotlin, the keyword by allows a class to expose all the public functions in a contained object through the container.

For example, a smartphone contains both a phone and a camera, among other components. If you think of the smartphone as a wrapper object, and the internal phone and camera as contained objects, the goal is to write the smartphone class so that its functions invoke the corresponding ones in the contained instances.

To do this in Kotlin, you need to create interfaces for the exposed ...

Get Kotlin Cookbook now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.