首页 文章

在没有reified关键字的情况下,在Kotlin中获取泛型类型参数的运行时类

提问于
浏览
0

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 回答

  • 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>() .
    如果可以推断出 testT ,则可以直接使用 test() ,并且仍然可以正确传递泛型参数 .

相关问题