Both "lateinit" and "by lazy" are Kotlin Property initializers.
- Use it with mutable variable [var]
- Allowed with only non-nullable data types
- This modifier is not allowed on properties of primitive types
- It is a promise to compiler that the value will be initialized in future.
- If you try to access lateinit variable without initializing it then it throws UnInitializedPropertyAccessException.
- Lazy initialization was designed to prevent unnecessary initialization of objects.
- Your variable will not be initialized unless you use it.
- It is initialized only once. Next time when you use it, you get the value from the memory.
- It is thread safe (It initializes in the thread where it is used for the first time. Other threads use the same value stored in the cache).
- The variable can only be val.
- The variable can only be non-nullable.