Cam*_*lMG 2 kotlin kotlin-null-safety
我目前正在学习Kotlin,以在我的android应用程序中替换Java,但正在努力确保安全性。
我已经熟悉处理null和non-null变量的过程,但是,我仍然不确定Kotlin中实现null / non-null变量方面的“最佳实践”。
例如,在Java中,我将编写如下内容:
UserAccount account;
if (account == null) {
openLogin();
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以在Kotlin中复制此语言,但似乎该语言旨在避免这种做法。我应该如何通过Kotlin实施此系统,我应该添加可为空的变量吗?
小智 5
该材料可能很有用:http : //www.baeldung.com/kotlin-null-safety
您可以搜索let()和run()方法。
let()方法
要仅在引用持有非空值时执行操作,我们可以使用let运算符。
假设我们有一个值列表,并且该列表中还有一个空值:
val firstName = "Tom"
val secondName = "Michael" val names:
List<String?> = listOf(firstName, null, secondName)
Run Code Online (Sandbox Code Playgroud)
接下来,我们可以使用let函数对名称列表中的每个非空元素执行操作:
var res = listOf<String?>() for (item in names) {
item?.let { res = res.plus(it) } }
assertEquals(2, res.size)
assertTrue { res.contains(firstName) }
assertTrue { res.contains(secondName) }
Run Code Online (Sandbox Code Playgroud)
run()方法
Kotlin有一个run()方法来对可为空的引用执行一些操作。它与let()非常相似,但在函数体内,run()方法在此引用上运行,而不是在函数参数上运行:
var res = listOf<String?>()
for (item in names) {
item?.run{res = res.plus(this)}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以在Kotlin中复制此语言,但似乎该语言旨在避免这种做法。
请注意没有空值的语言和空值安全的语言之间的区别。Kotlin是后者,这意味着它欢迎并拥抱其null
价值,但与Java之类的语言相反,它束缚了它的价值。
Kotlin为您提供语法,以简洁,可读和安全的方式处理可为空的类型。例如,
if (account == null){
openLogin();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下成语:
account ?: openLogin()
Run Code Online (Sandbox Code Playgroud)
在其他时候,您可能想要对非null采取行动,account
或者只是跳过部分代码(如果为)null
。然后,您可以使用可选的derefence ?.
:
account?.userName?.also { println("Username is $it") }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1583 次 |
最近记录: |