By
default, kotlin do not allow uninitialized properties. You must initialize them
at the time of declaration (or) in the constructor. Let me explain with an
example.
HelloWorld.kt
class Employee{ var id : String var name : String var city : String }
When
you try to compile above program, you will end up in below error.
ERROR: Property must be initialized or
be abstract (2, 2)
ERROR: Property must be initialized or
be abstract (3, 2)
ERROR: Property must be initialized or
be abstract (4, 2)
How to resolve above
problem?
There
are three ways:
a. Initialize the variables at the time
of declaration
b. Define the variables in constructor
c. Use late initialization
Initialize the
variables at the time of declaration
class Employee { var id: String = "123" var name: String = "Krishna" var city: String = "Ongole" }
Define the variables
in constructor
class Employee { var id: String var name: String var city: String constructor() { id = "123" name = "Krishna" city = "Ongole" } }
Use late
initialization
By using lateinit keyword, we can inform kotlin that this variable will be initialized at later point of time.
By using lateinit keyword, we can inform kotlin that this variable will be initialized at later point of time.
class Employee { lateinit var id: String lateinit var name: String lateinit var city: String }
Can I access lateint
property before initialization?
No,
If you try to access a lateinit property before initialization, you will end up
in 'UninitializedPropertyAccessException'
class Employee {
lateinit var id: String
lateinit var name: String
lateinit var city: String
}
fun main(args: Array<String>) {
var obj = Employee()
println("Id : ${obj.id}")
}
When
you try to run above program, you will end up in below exception.
Exception
in thread "main" kotlin.UninitializedPropertyAccessException:
lateinit property id has not been initialized
at Employee.getId(HelloWorld.kt:2)
at HelloWorldKt.main(HelloWorld.kt:10)
To
resolve the error define the lateinit properties before accessing.
HelloWorld.kt
class Employee { lateinit var id: String lateinit var name: String lateinit var city: String } fun main(args: Array<String>) { var obj = Employee() obj.id = "123" println("Id : ${obj.id}") }
Output
Id
: 123
No comments:
Post a Comment