代码之家  ›  专栏  ›  技术社区  ›  CoXier

在kotlin中nullable的用途是什么[副本]

  •  1
  • CoXier  · 技术社区  · 7 年前

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

    有一种方法。

    fun hello(name: String)
    

    如你所见,参数 name 不为空。那我就用它。

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

    如果 bob 为空,上面的代码将引发 KotlinNullPointerException . 所以我得把支票包起来。

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

    在这种情况下,什么是最佳实践?可空有什么用?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Oz Molaim    7 年前

    这取决于您对业务逻辑进行编码。

    通常你会想用'!!'操作员,以防您100%确定bob不为空。那样的话'!!'是忽略“bob”为空的选项的干净的非详细方式。

    如果bob有可能为空,请使用if/else,或者如果这是一个业务错误,建议抛出适当的业务异常,或者以处理项目中错误的通常方式处理它。

        2
  •  -1
  •   SimpleStudent    7 年前

    这就是您将如何使用这样一个函数:

    fun hello(bob: String) {
        println(bob);
    }
    hello("Bob!!");
    

    这意味着函数 hello 有一个名为 bob ,数据类型为 String .

    在你的例子中,你给出了 你好 函数未声明的变量( 鲍勃 ,因此jvm只能传递 null . 如果要传入名为 bobby ,代码如下所示:

    fun hello(bob: String) {
        println(bob);
    }
    val bobby = "Hello!!!";
    hello(bobby);
    

    希望这对你的努力有所帮助:)

        3
  •  -1
  •   Binary Baba    7 年前

    可空有什么用?

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

    最好的做法是什么?

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

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

    没必要这么做 bob!! ,只是 bob 会的,因为您已经做了空检查,编译器会跟踪空检查并允许您使用该变量。

    使用非空断言(!!)当您完全确定变量不为空时,在这种情况下,也不需要用空检查包围。