如果使用具体化T创建inline函数,则即使在运行时也可以访问T类型,因此不需要额外传递Class<T>。你可以像使用普通类一样使用T——例如,你可能想检查一个变量是否为的实例T,这很容易做到:myVar is T。
这样一个具有reified类型T的inline函数如下所示:
inline fun <reified T> myGenericFun()
reified是如何工作的
只能将reified与inline函数结合使用。通过这样做,你指示编译器将函数的字节码复制到函数调用的每个位置(编译器的“内联”;函数)。当调用具有reified类型的inline函数时,编译器必须能够知道作为类型参数传递的实际类型,以便它可以修改生成的字节码以直接使用相应的类。因此,像myVar is T这样的调用在字节码中变成myVar is String(如果类型参数是String)。
inline fun <reified T> doSomething() {
// Passing T as an argument to another function
doSomethingElse<T>()
}
inline fun <reified T> doSomethingElse() { }