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关键字的文档,它会说:
此外,问题是,如果我们查看上述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。
这是错误还是功能?有人遇到过这个问题吗?
最佳答案
这是Kotlin 1.3.0版中存在的一个已知错误。
见https://youtrack.jetbrains.com/issue/KT-28061
如果可能,请升级到Kotlin版本> = 1.3.20
关于android - Kotlin不检查函数签名中具有某些返回类型的函数中的return语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55224256/