Kotlin get type of generic class without instance
Asked Answered
T

1

6

I 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

}

Right now compiler complains

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

I've tried to use solution from this answer but it's not working for me

Trochlear answered 21/11, 2017 at 16:37 Comment(0)
P
2

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)
Perlaperle answered 25/1, 2019 at 10:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.