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>
作为参数可以是一个解决方案,但我不想为此目的向我的函数传递额外的参数 .
1 回答
一个有点棘手的解决方案:
在这个解决方案中,你实际上是在传递一个
Class
实例,但是你没有直接这样做 . 您的调用代码可能看起来像test<Xxx>()
.如果可以推断出
test
的T
,则可以直接使用test()
,并且仍然可以正确传递泛型参数 .