Kotlin提供了一种使用reified
关键字获取泛型类型参数的运行时类的方法,该关键字只能与inline
函数一起使用。例如,以下工作:
inline fun <reified T> test() : T {
println(T::class.java)
}
但是,我需要一种在非内联函数中执行此操作的方法。由于reified
关键字不是非内联函数的选项,因此以下内容不起作用:
fun <reified T> test() : T {
println(T::class.java)
}
Kotlin有不同的方法来解决这个问题吗?我知道将Class<T>
作为参数可以是一个解决方案,但我不想为此目的向我的函数传递额外的参数。
答案 0 :(得分:0)
一个有点棘手的解决方案:
inline fun <reified T> test() : T = testImpl(T::class.java)
private fun <T> testImpl(`class`: Class<T>) : T {
println(`class`)
// do something
}
在此解决方案中,您实际上正在传递Class
个实例,但您并未直接执行此操作。您的调用代码可能看起来像test<Xxx>()
如果可以推断出T
test
,则可以直接使用test()
,并且仍然可以正确传递通用参数。