Avatar ·

Kotlin中的属性初始化:by lazy还是lateinit——如何选择?

大家好!我刚开始学习Kotlin,遇到了一个问题。我正在编写一个小应用程序,需要初始化一些类的属性,但它们的值并不是立即就能确定的——例如,在加载数据之后,或者在Android的`onCreate`中。 我知道两种方法:`lateinit`和`by lazy`。但我不明白什么时候该用哪一个。以下是我的代码示例: ```kotlin class MyActivity : AppCompatActivity() { private lateinit var userName: String private val userAge: Int by lazy { fetchUserAge() // 这个方法可能稍后才会被调用 } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userName = "John" // 初始化lateinit } private fun fetchUserAge(): Int { return 25 } } ``` 问题在于,如果我对`userName`使用`lateinit`,那么当我试图把它声明为`val`时,IDE会报错。而`by lazy`只适用于`val`。我还听说`latei