【发布时间】:2021-07-17 13:43:36
【问题描述】:
如果函数只包含一个表达式,则可以从该表达式推断出它的返回类型。 听起来很简单:
fun max(a: Int, b: Int) = if (a > b) a else b
在这种情况下,函数的返回类型将是 Int。
但是下一个例子中会是什么类型呢?
fun max(a: Int, b: Int) = if (a > b) a else true
【问题讨论】:
-
它是
Any。您所要做的就是将该代码写入任何 IDE,它会告诉您这一点。如果你想知道更多关于Any你have the docs here -
对不起,没有意义。最好的答案来自 Kotlin 编译器本身:尝试并报告。我猜? “这个函数不正确。”
-
@duffymo 函数是正确的,它可以编译和运行得很好,在 Java 中它相当于返回
Object。 -
这个特殊的例子?不知道。但是返回多种类型的函数(在
Any下)并不少见(并不是说它们是最好的解决方案,它们通常指向代码异味)。 -
@duffymo 哦,对了,你特别在谈论那个 max 函数的目标。当然没有意义。这只是一个关于类型推断行为的理论问题。我不认为我们应该尝试看这里的代码的含义。
标签: function kotlin expression type-inference