我很惊讶这段代码是在Kotlin中编译的。
fun foo(key: String, value: Int?) {
if (value == null) {
bar(value)
}
}
fun bar(key: String?) {
}
您可以看到foo
以value
的形式将Int?
类型的bar
传递给String?
。我猜这是因为在这种情况下value
必须是null
,但是显然bar(value)
中的foo
是bar(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)
答案 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() {}