Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';s在Kotlin中使用nullable_Kotlin - Fatal编程技术网

什么';s在Kotlin中使用nullable

什么';s在Kotlin中使用nullable,kotlin,Kotlin,我不知道nullable在Kotlin的某些情况下有什么用处。让我举个例子 有一种方法 fun hello(name: String) 如您所见,paramname是非空的。那我就用它 hello(bob!!) // bob is a nullable string 如果bob为空,上述代码将抛出KotlinNullPointerException。所以我得把支票包起来 if(bob != null) { hello(bob!!) } 那么在这种情况下,最好的做法是什么?nulla

我不知道nullable在Kotlin的某些情况下有什么用处。让我举个例子

有一种方法

fun hello(name: String)
如您所见,param
name
是非空的。那我就用它

hello(bob!!) // bob is a nullable string
如果
bob
为空,上述代码将抛出
KotlinNullPointerException
。所以我得把支票包起来

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

那么在这种情况下,最好的做法是什么?nullable有什么用呢?

这是您使用这种函数的方式:

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);

希望这对您的工作有所帮助:)

这是您编写业务逻辑来决定的问题

通常,您会希望使用“!!”运算符,以防100%确定bob不为空。在这种情况下,“!!”是一种忽略“bob”为null的选项的干净的非详细方式

如果bob有可能为null,请使用If/else,或者如果是业务错误,建议抛出适当的业务异常,或者以您在项目中处理错误的通常方式处理它

nullable有什么用

例如,一个布尔变量只能保存两种类型的值,true和false。没有办法表示“未定义”。有时我们需要一种方法来判断变量处于未定义状态。例如,在数据库或网络交互中,您可能不会收到任何值,所以变量必须以未定义的状态存在,这就是null值的含义。 这不仅适用于Kotlin,也适用于任何语言

最佳做法是什么

对于可为null的类型,总是存在null指针异常的风险,所以最好在访问null之前检查它,在这里

if(bob != null) {
    hello(bob!!)
}
不需要做
bob,只要
bob
就可以了,因为您已经完成了空检查,所以编译器会跟踪空检查并允许您使用该变量


当您完全确定变量不为null时,请使用非null断言(!!),在这种情况下,无需同时进行null检查。

非常感谢。我明白了。