如何防止将其他类型的null传递给函数

时间:2019-11-13 08:57:25

标签: kotlin

我很惊讶这段代码是在Kotlin中编译的。

fun foo(key: String, value: Int?) {
    if (value == null) {
        bar(value)
    }
}

fun bar(key: String?) {
}

您可以看到foovalue的形式将Int?类型的bar传递给String?。我猜这是因为在这种情况下value必须是null,但是显然bar(value)中的foobar(key)的错字。

是否有任何编译器选项来使此错误或警告,或者是否有防止该错误的常用方法?我还想知道这种行为在哪些用例中有用。

我正在使用Kotlin version 1.3.50-release-112 (JRE 1.8.0_152-b16)

请注意,此代码无法编译(如我所料)。

fun foo(key: String, value: Int?) {
    bar(value)
}

fun bar(key: String?) {
}

出现此错误。

k2.kt:2:9: error: type mismatch: inferred type is Int? but String? was expected
    bar(value)

1 个答案:

答案 0 :(得分:0)

  

有防止这种错误的常用方法吗?

是-避免使用null和/或接受可为空的参数。

方法fun bar(key: String?)实际上是两个不同的函数-一个有输入,一个没有输入。该实现可能类似于:

fun foo(key: String, value: Int?) {
    if (value == null) {
        barEmpty()
    } else {
        /*Something else*/
    }
}

fun bar(key: String) {}

fun barEmpty() {}