从泛型中获取 class 类型
Getting class type from generics
我的函数中有一个通用类型 T,我需要获取 Class 类型才能将其发送到另一个函数。我读过几篇文章,说在 Java/Kotlin 中很难做到这一点,并尝试了一些解决方案,但其中 none 奏效了。
这是我的代码:
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
具有需要此 Class<T>
类型的此 get
函数。
这是我收到的错误:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
它发生在 getClassType()
函数上。
您尝试过使用 reified
类型参数吗?请注意,它将要求您的方法变为内联:
companion object {
inline fun <reified T : ViewModel?> getViewModel(fragment: Fragment, creator: () -> T): T {
return ViewModelProviders.of(fragment, BaseViewModelFactory(creator)).get(T::class.java)
}
}
我的函数中有一个通用类型 T,我需要获取 Class 类型才能将其发送到另一个函数。我读过几篇文章,说在 Java/Kotlin 中很难做到这一点,并尝试了一些解决方案,但其中 none 奏效了。
这是我的代码:
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
具有需要此 Class<T>
类型的此 get
函数。
这是我收到的错误:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
它发生在 getClassType()
函数上。
您尝试过使用 reified
类型参数吗?请注意,它将要求您的方法变为内联:
companion object {
inline fun <reified T : ViewModel?> getViewModel(fragment: Fragment, creator: () -> T): T {
return ViewModelProviders.of(fragment, BaseViewModelFactory(creator)).get(T::class.java)
}
}