Sobes.tech
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.