Kotlin 如何使用表达式主体推断 return 类型的函数

How Kotlin inferencing return type of function with expression body

如果函数只包含一个表达式,则可以从该表达式推断出其 return 类型。 这听起来很简单:

fun max(a: Int, b: Int) = if (a > b) a else b

在这种情况下,return 类型的函数将是 Int。

但是下一个例子是什么类型呢?

fun max(a: Int, b: Int) = if (a > b) a else true

推理只是给出了表达式可能值类型的最近祖先。

此处您的表达式可以生成 BooleanInt。在这种情况下,最近的祖先是 Comparable<*>,因此这是函数的 return 类型。

如果类型完全不相关,则共同祖先将是 Any,这在 Kotlin 中是所有不可空类型的共同祖先。 如果其中一个值也可以为 null,你可能会得到一个 return 类型,即 Any?,它是 Kotlin 中所有类型的最终父类(类似于 Java 的Object).