Middle
Millal kasutada 'lateinit' ja 'by lazy' Kotlinis?
sobes.tech AI
Vastus AI-lt
lateinit kasutatakse mitte-nullable omaduste jaoks, mis määratakse hiljem, enne nende esimesele kasutamisele. Kasutatakse koos var.
klass UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // Määratakse in onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Nüüd saab bindingut kasutada
}
}
by lazy kasutatakse mitte-nullable või nullable omaduste jaoks, mis määratakse esimesele kasutamisele. Kasutatakse koos val.
klass DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Võrdlus:
| Omadus | lateinit |
by lazy |
|---|---|---|
| Kasutamine | var |
val |
| Tüüp | Non-nullable | Non-nullable või nullable |
| Initsialiseerimine | Hiljem, käsitsi | Esimesele kasutamisele, automaatselt |
| Tootekindlus | Ei garanteerita (kui käsitsi ei sünkroniseeri) | Garanteeritud automaatselt (sünkroniseeritud) |
| Nullväärtus | Ei lubata enne initsialiseerimist (viskab erandi) | Ei (tüüp määratakse initsialiseerijaga) |
Kasuta lateinit, kui omaduse väärtus sõltub kontekstist või muudest teguritest ning peab olema määratud pärast objekti loomist, kuid enne selle kasutamist (näiteks Android Activitys View-de sidumine).
Kasuta by lazy omadustele, mis on kulukad loomisel või võivad kogu objekti eluea jooksul olla kasutamata, või kui soovid viivitada initsialiseerimisega kuni esimese tegeliku kasutamiseni.