Middle
Kdy byste měli použít 'lateinit' a 'by lazy' v Kotlinu?
sobes.tech AI
Odpověď od AI
lateinit se používá pro nenulové vlastnosti, které budou později inicializovány, před prvním přístupem k nim. Používá se s var.
class UserActivity : AppCompatActivity() {
lateinit var binding: ActivityUserBinding // Bude inicializováno v onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Nyní lze používat binding
}
}
by lazy se používá pro nenulové nebo nulové vlastnosti, které jsou inicializovány při prvním přístupu. Používá se s val.
class DataManager {
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Porovnání:
| Vlastnost | lateinit |
by lazy |
|---|---|---|
| Použití | var |
val |
| Typ vlastnosti | Nenulové | Nenulové nebo nulové |
| Inicializace | Pozdní, ručně | Při prvním přístupu, automaticky |
| Bezpečnost vláken | Není garantováno (je potřeba synchronizace ručně) | Garantováno (synchronizováno) |
| Nulová hodnota | Není povolena před inicializací (vyvolá výjimku) | Ne (typ je určen inicializátorem) |
Použijte lateinit, když hodnota vlastnosti závisí na kontextu nebo jiných faktorech a musí být nastavena po vytvoření objektu, ale před jejím použitím (například při vázání pohledů v Androidové aktivitě).
Použijte by lazy pro vlastnosti, které jsou nákladné na vytvoření nebo nemusí být potřeba po celou dobu života objektu, nebo když chcete odložit inicializaci do prvního skutečného použití.