Kotlin获得没有实例的泛型类的类型

时间:2017-11-21 16:37:17

标签: kotlin-extension

嘿想要得到 T 的类型,但是我无法从实例中获取它,我必须从类参数中获取它,该怎么做?

abstract class ViewModelFragment<T : ViewModel>{
    protected lateinit var mViewModel: T

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
       mViewModel = ViewModelProviders
                    .of(scope)
                    .get(getGenericTClass())
    // .get(mViewModel.javaClass) // not working either

   }

   inline fun<reified R> getGenericTClass() = R::class.java

}

现在编译器抱怨

  

不能使用'T'作为精炼类类型。改用Class。

我尝试使用以下解决方案:https://stackoverflow.com/a/34463352/2163045但不适合我

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,下面的代码对我有帮助:

  val persistentClass = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
    mViewModel = ViewModelProviders.of(this, viewModelsFactory).get(persistentClass)