Sobes.tech
Middle

Kad būtu jālieto 'lateinit' un 'by lazy' Kotlin?

sobes.tech AI

Atbilde no AI

lateinit tiek izmantojamām īpašībām, kas nav nullable, bet tiks iepriekš vēlāk, pirms pirmās piekļuves tām. Lieto ar var.

klase UserActivity : AppCompatActivity() {
    lateinit var binding: ActivityUserBinding // Tiks inicializēts onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // Tagad var izmantot binding
    }
}

by lazy tiek izmantots non-nullable vai nullable īpašībām, kas tiek inicializētas pirmreiz, kad piekļūst tām. Lieto ar val.

klase DataManager {
    val apiService: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

Salīdzinājums:

Raksturlielums lateinit by lazy
Lietošana var val
Īpašības tips Non-nullable Non-nullable vai nullable
Inicializācija Vēlāk, manuāli Pirmreiz, automātiski
Plūsmas drošība Nav garantēta (ja nav sinhronizēta manuāli) Garantēta automātiski (sinhronizēta)
Nulle vērtība Nav atļauta pirms inicializācijas (mestīs izņēmumu) Nav (tips noteikts ar inicializatoru)

Izmantojiet lateinit, kad īpašības vērtība ir atkarīga no konteksta vai citiem faktoriem un tai jābūt iestatītai pēc objekta izveides, bet pirms tās izmantošanas (piemēram, Android aktivitātē, kad piesaistāt skatus).

Izmantojiet by lazy īpašībām, kas ir dārgas izveidē vai var nebūt nepieciešamas visa objekta dzīves laikā, vai kad vēlaties atlikt inicializāciju līdz pirmajai faktiskajai izmantošanai.