class TestReturnFunction{
fun convertIntToString(intVal:Int?):String{
intVal?.let {
return it.toString()
}
}
}
在上面的TestReturnFunction中,有一个朴素的函数将int转换为String。在函数内部,我们使用let关键字,该关键字仅在let的参数为非null时才运行代码块。因此,let内部的return语句仅在参数为非null时运行。
上述问题是intVal为null且Android studio不给出任何错误的情况下没有返回语句。
如果我们在kotlin中查看let关键字的文档,则会显示:
以
this
值作为参数调用指定的函数[block]并返回其结果。
此外,问题在于,如果我们查看上面kotlin代码的java字节码,则看起来像下面
public final class TestReturnFunction {
@NotNull
public final String convertIntToString(@Nullable Integer intVal) {
if (intVal != null) {
int it = ((Number)intVal).intValue();
return String.valueOf(it);
} else {
return null;
}
}
}
现在,此代码的问题在于intVal为null的情况下该函数返回null,但该函数的返回类型为不可为null的类型。 这是错误还是功能?有人遇到过这个问题吗?
答案 0 :(得分:2)
这是Kotlin版本1.3.0中存在的已知错误。
请参阅https://youtrack.jetbrains.com/issue/KT-28061
如果可能,请升级到Kotlin版本> = 1.3.20