gpt4 book ai didi

kotlin - Kotlin 中的本地延迟初始化

转载 作者:行者123 更新时间:2023-12-01 02:03:33 26 4
gpt4 key购买 nike

由于 lateinit 不允许用于局部变量,我如何在函数中延迟初始化变量?否则,这种情况下的好的模式是什么:

private fun displaySelectedScreen(itemID: Int) {
//creating fragment object
val fragment: Fragment
//initializing the fragment object which is selected
when (itemID) {
R.id.nav_schedule -> fragment = ScheduleFragment()
R.id.nav_coursework -> fragment = CourseworkFragment()
R.id.nav_settings -> {
val i = Intent(this, SettingsActivity::class.java)
startActivity(i)
}
else -> throw IllegalArgumentException()
}
//replacing the fragment, if not Settings Activity
if (itemID != R.id.nav_settings) {
val ft = supportFragmentManager.beginTransaction()
ft.replace(R.id.content_frame, fragment)// Error: Variable 'fragment' must be initialized
ft.commit()
}
drawerLayout.closeDrawer(GravityCompat.START)
}

最佳答案

when 是一个表达式,所以

val fragment: Fragment = when (itemID) {
R.id.nav_schedule -> ScheduleFragment()
R.id.nav_coursework -> CourseworkFragment()
...
else -> throw IllegalArgumentException()
}

将适用于此用例。

局部变量没有等效的lateinit。其他语言结构,如 tryif 也是表达式,因此永远不需要。


2017-11-19 更新

Kotlin 1.2 支持局部变量的 lateinit,所以

lateinit val fragment: Fragment

从 Kotlin 1.2 开始工作。

关于kotlin - Kotlin 中的本地延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43179526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com