Chapter 3. Object-Oriented Programming in Kotlin

Like Java, Kotlin is an object-oriented programming (OOP) language. As such, it uses classes, both abstract and concrete, and interfaces in a way that is familiar to Java developers.

Some aspects of OOP in Kotlin are worth spending additional time on, and this chapter does so. It includes recipes that involve initializing objects, providing custom getters and setters, performing late and lazy initialization, creating singletons, understanding the Nothing class, and more.

3.1 Understanding the Difference Between const and val


You need to indicate that a value is a compile-time rather than a runtime constant.


Use the modifier const for compile-time constants. The keyword val indicates that a variable cannot be changed once it is assigned, but that assignment can occur at runtime.


The Kotlin keyword val indicates a variable that cannot be changed. In Java, the keyword final is used for the same purpose. Given that, why does Kotlin also support the modifier const?

Compile-time constants must be top-level properties or members of an object declaration or a companion object. They must be of type String or a primitive type wrapper class (Byte, Short, Int, Long, Float, Double, Char, or Boolean), and they cannot have a custom getter function. They must be assigned outside any function, including main, because their values must be known at compile time.

As an example, consider defining a min and max priority ...

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.