【发布时间】:2018-08-02 16:56:48
【问题描述】:
我的函数中有一个泛型类型 T,我需要获取 Class 类型才能将它发送到另一个函数。我读过几篇文章,说在 Java/Kotlin 中很难做到这一点,并尝试了几种解决方案,但都没有奏效。
这是我的代码:
class FishbrainViewModelProviders {
companion object {
private fun <T : ViewModel?> getClassType(): Class<T> {
return (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
}
fun <T : ViewModel?> getViewModel(fragment: Fragment, creator: () -> T): T {
return ViewModelProviders.of(fragment, BaseViewModelFactory(creator)).get(getClassType<T>())
}
}
}
这里的问题是ViewModelProviders.of 返回的ViewModelProvider 有这个get 函数,它需要这个Class<T> 类型。
这是我得到的错误:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
它发生在 getClassType() 函数上。
【问题讨论】:
标签: android generics kotlin functional-programming factory