什么在Kotlin中可以使用nullable

时间:2018-06-03 04:36:33

标签: kotlin

我不知道Kotlin在某些情况下对可空的使用是什么。让我举个例子。

有一种方法。

fun hello(name: String)

如您所见,参数name不为空。然后我会用它。

hello(bob!!) // bob is a nullable string

如果bob为空,则上面的代码将抛出KotlinNullPointerException。所以我必须检查。

if(bob != null) {
    hello(bob!!)
}

所以在这种情况下,最佳做法是什么?什么是可空的?

3 个答案:

答案 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时使用非空断言(!!),在这种情况下,也不需要使用空值检查。