问题
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
}
Right now compiler complains
Cannot use 'T' as refined class type. Use Class instead.
I've tried to use solution of: https://stackoverflow.com/a/34463352/2163045 but not working for me
回答1:
I have the same issue and code below helped me:
val persistentClass = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
mViewModel = ViewModelProviders.of(this, viewModelsFactory).get(persistentClass)
来源:https://stackoverflow.com/questions/47418161/kotlin-get-type-of-generic-class-without-instance