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/

10-11 22:25
查看更多