我想知道是否有办法检查lateinit
变量是否已初始化。例如:
class Foo() {
private lateinit var myFile: File
fun bar(path: String?) {
path?.let { myFile = File(it) }
}
fun bar2() {
myFile.whateverMethod()
// May crash since I don't know whether myFile has been initialized
}
}
您可以通过以下方式轻松做到这一点:
::variableName.isInitialized
或
this::variableName.isInitialized
但是如果你在一个听众或内部类中,请这样做:
this@OuterClassName::variableName.isInitialized
注意:如果您在声明变量的同一个文件(同一个类或内部类)中编写上述语句,则它们可以正常工作,但如果您想检查其他类(可能是超类或任何其他实例化的类)的变量,则这将不起作用,例如:
class Test {
lateinit var str:String
}
并检查str是否初始化:
我们在这里做的是:在Test2
类中检查Test
类的字段str
。我们得到了一个错误,var的支持字段此时不可访问。检查一个已经提出的问题。
使用。isInitialized
属性可以检查lateinit变量的初始化状态。
if (::file.isInitialized) {
// File is initialized
} else {
// File is not initialized
}
Kotlin 1.2中有一个lateinit
改进,允许直接检查lateinit
变量的初始化状态:
lateinit var file: File
if (this::file.isInitialized) { ... }
查看JetBrains博客上的公告或KEEP提案。
更新:Kotlin 1.2已经发布。您可以在这里找到lateinit
增强功能:
我想知道是否有一种方法可以检查变量是否已经初始化。例如:
问题内容: 我需要使用类似于php的isset函数的东西。我知道php和java截然不同,但是php是我先前类似编程知识的唯一基础。是否有某种方法可以返回一个布尔值,用于确定实例变量是否已初始化。例如… 到目前为止,我遇到了这个问题,当我的程序试图隐藏或删除尚未构造的对象时,出现运行时错误。 问题答案: 假设您对是否已为变量 明确赋值 感兴趣,答案是“不是真的”。但绝对的字段(实例变量或类变量)尚
因为我是android开发新手,所以我不知道如何在使用lateinit变量之前初始化它。在此之前,我尝试过执行,就像这个github中提到的,但没有成功。所以现在我希望问题出在初始化textInput变量上。
问题内容: 哪种方法检查变量是否已初始化是更好/正确的方法?(假设变量可以容纳任何内容(字符串,整数,对象,函数等)) 要么 要么 问题答案: 该运营商将检查变量真的不确定。 该运营商,不同于其他运营商,不会抛出 的ReferenceError 与未声明的变量使用时例外。 但是,请注意将返回。我们必须小心避免将变量初始化为的错误。为了安全起见,我们可以改用以下方法:
我正在将一个项目从java迁移到kotlin,该项目使用了许多可能为空的变量,并且在与用户或外部作业进行一些交互之前不会初始化它们。 我试图使用kotlin null安全优势,并且我试图避免在源代码中使用<code>nulllateinitvar location:location?=空 我这样做是为了避免使用< code >?每次我需要使用这些变量时。现在的问题是...如果变量没有初始化会发生什
我找到了静态编程语言Lazy对象的答案,在这里使用:静态编程语言:检查Lazy val是否已初始化 但看起来像匕首。Lazy没有相同的公共方法。 这就是我如何懒洋洋地使用Dagger注射: 如何在不调用someService的情况下检查someService是否已初始化。get()哪个将初始化它?除了引入布尔标志并自己跟踪它之外。。 谢谢