
[英]kotlin type inference failed when calling an inline function using reified return type in a string template
[英]Why to use 'inline' when using a 'reified' type
我读过的所有关于类型具体化的教程都说我们在使用“具体化”时需要使用“内联”,但没有一个解释为什么。
假设我有一个 function:
inline fun <reified T> doSomething(value: T) {
println("Doing something with type: ${T::class.simpleName}")
}
据我了解,使用“具体化”可以防止类型擦除。 那么为什么我们不能在普通的非内联 function 中使用它。 使用 inlined 将使编译器在调用站点复制上述 function 的主体。 但是为什么我们需要发生这种情况呢?
具体类型不是魔法——类型擦除仍然照常发生。 那么具体化类型是如何工作的呢? 好吧,假设我打电话:
doSomething("Foo")
编译器计算出T
是String
。 它可以直接将上面的行翻译成:
println("Doing something with type: ${String::class.simpleName}")
因此,从表面上看,类型似乎是具体化的,但实际上,类型只是内联的。 这也是为什么 function 需要inline
的原因。 如果它不是inline
,则编译器无法内联类型参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.