Kotlin不检查函数签名中具有某些返回类型的函数中的return语句

时间:2019-03-18 14:59:34

标签: android kotlin

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的类型。 这是错误还是功能?有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:2)

这是Kotlin版本1.3.0中存在的已知错误。

请参阅https://youtrack.jetbrains.com/issue/KT-28061

如果可能,请升级到Kotlin版本> = 1.3.20