When To Use Lateinit Kotlin

How To Articles

Hey there! Today, I want to talk about a super useful feature in Kotlin called lateinit. As a developer, I’ve found myself using it quite often, and it has proven to be a valuable tool in certain situations. So, let’s dive deeper into when and why you might want to use lateinit in your Kotlin code.

Before we get started, let me first explain what lateinit is. In Kotlin, variables must normally be initialized when they are declared or assigned a value in the constructor. However, there are some cases where you don’t know the initial value of a variable when declaring it, but you still want to avoid using nullable types. This is where lateinit comes to the rescue!

Understanding the Basics

The lateinit modifier can only be applied to var properties, not val. It allows you to defer the initialization of a non-null property until later, before you actually access its value. This means that you can declare a non-null property without providing an initial value.

But hold on! There are some important things to keep in mind when using lateinit. First, the property must be of a non-primitive type, because primitive types cannot be null. Second, you need to make sure that the property is initialized before using it, otherwise, a lateinit property access exception will be thrown at runtime.

When to Use lateinit Kotlin?

Now, let’s talk about when it makes sense to use lateinit in your Kotlin code. One common scenario is when you’re dealing with dependency injection frameworks, such as Dagger or Koin. In these frameworks, dependencies are typically injected into properties, but their values are not available immediately. By using lateinit, you can declare your dependency properties without initializing them upfront, and then assign the actual values when they become available.

Another situation where lateinit can be handy is when you’re working with Android development. In Android, there are times when you need to initialize certain components or variables in the onCreate() method of an activity or fragment. With lateinit, you can declare those properties without assigning them a value right away and then initialize them later in the onCreate() method.

Additionally, lateinit can be useful in scenarios where you’re dealing with heavy initialization or costly operations. By deferring the initialization of a property until it’s actually needed, you can optimize the performance of your code and potentially improve the startup time of your application.


In conclusion, lateinit is a powerful feature in Kotlin that allows you to defer the initialization of non-null properties until they are needed. It’s particularly useful in situations where the initial value of a property is not available at the time of declaration, but you still want to avoid using nullable types.

Whether you’re working with dependency injection frameworks, Android development, or trying to optimize performance, lateinit can be a valuable tool in your Kotlin toolbox.

So, the next time you find yourself in a situation where delaying the initialization of a property makes sense, give lateinit a try. I’m sure you’ll appreciate the flexibility and convenience it offers!