Kotlin获取没有实例的泛型类的类型 [英] Kotlin get type of generic class without instance

查看:250
本文介绍了Kotlin获取没有实例的泛型类的类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿要获取 T 的类型,但是我不能从实例中获取它,我必须从类参数中获取它,怎么做?

Hey want go get Type of T , but I can not get it from instance, I have to get it from class parameter, how to do it?

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.

Cannot use 'T' as refined class type. Use Class instead.

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

I've tried to use solution of: https://stackoverflow.com/a/34463352/2163045 but not working for me

推荐答案

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

I have the same issue and the code below helped me:

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

这篇关于Kotlin获取没有实例的泛型类的类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆