我正在调查编译器如何根据return语句推断函数的返回类型。然后我遇到了困扰我的事情。
我有这个Kotlin功能:
Int
它可以返回String
或Any
,因此它的编译时类型为Any
(即,如果您调用此函数并指定它返回变量的值,该变量的类型为>>> examples.ambigousTypeEval("cricket")::class
examples.ambigousTypeEval("cricket")class kotlin.Int
>>> examples.ambigousTypeEval("football")::class
examples.ambigousTypeEval("football")class kotlin.String
)。
但是,当我在kotlinc REPL中加载该代码并检查它的类型时,我为不同的输入获得了不同的类型......
(String) -> Any
这里发生了什么?
编辑:要清楚,我想知道如何找出该函数的编译时类型。即我期待看到类似的内容:{{1}}
答案 0 :(得分:3)
解决编辑问题:
您必须首先获得对该功能的引用:
val func = examples::ambiguousTypeEval
这是KFunction
个实例。
现在只需检索其returnType
:
val returnType: KType = examples::ambiguousTypeEval.returnType
在这种情况下,返回类型将是与KType
对应的Any
。
您可以通过parameters
检索参数类型。