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