如何在Kotlin中创建变量而不进行初始化?

时间:2018-10-24 08:36:07

标签: android kotlin

这是一个简单的问题。在Java中,您可以创建String变量或几个变量,而无需添加任何值。在Activity中调用onCreate()之前,将在类的开头使用它。我已经在Kotlin中使用了lateinit属性来实现这一点,但是现在我在更改RecyclerView的可见性方面遇到了问题。它将引发异常"lateinit property recyclerView has not been initialized"

有什么方法可以知道属性是否已初始化?在Fragment的父活动开始时调用此方法(隐藏recyclerView并显示ProgressBar,直到数据绑定到recyclerView为止。)

2 个答案:

答案 0 :(得分:1)

  

在Java中,您可以创建String变量或几个变量,而无需向其添加任何值

实际上,在这种情况下,它被隐式声明为null。 Kotlin不这样做,因为它具有可空性机制。您必须明确声明一个可为null的变量以允许为null:

var str: String // does not work
var str: String? // does not work
var str: String? = null // works

另请参阅this answer

您的另一种选择确实是将其标记为lateinit

lateinit var str: String // works

如果需要检查使用前是否已初始化,请使用

if (::str.isInitialized)

但是实际上,您应该避免使用此检查,只是在使用前确保已将其初始化。

答案 1 :(得分:0)

如果您需要在Kotlin中获取UI元素,则无需再使用findViewById创建变量并将其初始化(尽管可以)。使用kotlin视图绑定,效果很好。

https://kotlinlang.org/docs/tutorials/android-plugin.html#view-binding