Kotlin получает тип универсального класса без экземпляра

Эй, хочу получить тип 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» в качестве уточненного типа класса. Вместо этого используйте класс.

Я пытался использовать решение: https://stackoverflow.com/a/34463352/2163045, но не работает для меня


person murt    schedule 21.11.2017    source источник


Ответы (1)


У меня такая же проблема, и мне помог приведенный ниже код:

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