我不知道Kotlin在某些情况下对可空的使用是什么。让我举个例子。
有一种方法。
fun hello(name: String)
如您所见,参数name
不为空。然后我会用它。
hello(bob!!) // bob is a nullable string
如果bob
为空,则上面的代码将抛出KotlinNullPointerException
。所以我必须检查。
if(bob != null) {
hello(bob!!)
}
所以在这种情况下,最佳做法是什么?什么是可空的?
答案 0 :(得分:1)
您需要编写业务逻辑来决定。
通常你会想要使用' !!'如果您100%确定bob不为null,则运算符。在那种情况下,' !!'是一种干净的非冗长的方式来忽略“bob'是空的。
如果bob有可能为null,请使用if / else或者如果是业务错误,建议抛出适当的业务异常或以通常的方式处理项目中的错误。
答案 1 :(得分:-1)
这就是你如何使用这样一个功能:
fun hello(bob: String) {
println(bob);
}
hello("Bob!!");
这意味着函数hello
有一个名为bob
的参数,数据类型为String
。
在您的示例中,您为hello
函数提供了一个尚未声明的变量(bob
),因此JVM无法传递除null
之外的任何内容。如果要传入名为bobby
的变量,代码将如下所示:
fun hello(bob: String) {
println(bob);
}
val bobby = "Hello!!!";
hello(bobby);
希望这有助于你的努力:)
答案 2 :(得分:-1)
什么是使用可空?
以一个布尔变量为例,它只能容纳两种类型的值,true为false。没有办法表示" undefined"。有时我们需要一种方法来判断变量是否处于未定义状态。例如,在数据库或网络交互中,您可能不会收到任何值,因此变量必须存在于某个未定义状态,并且该值表示空值。 这不仅适用于Kotlin,它适用于任何语言。
什么是最佳做法?
对于可空类型,总是存在空指针异常的风险,因此在访问它之前最好检查null,并在此处
if(bob != null) {
hello(bob!!)
}
无需执行bob!!
,只需bob
即可,因为您已完成空检查,编译器会跟踪空检查并允许您使用该变量。
当您完全确定变量不为null时使用非空断言(!!),在这种情况下,也不需要使用空值检查。