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

1 Answer 1

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)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.