嘿,想要获取T 的类型,但我无法从实例中获取它,我必须从类参数中获取它,该怎么做?
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
}
Run Code Online (Sandbox Code Playgroud)
现在编译器抱怨
不能使用“T”作为精炼的类类型。请改用 Class。
我尝试使用以下解决方案:https : //stackoverflow.com/a/34463352/2163045但对我不起作用
小智 2
我有同样的问题,下面的代码帮助了我:
val persistentClass = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
mViewModel = ViewModelProvider(this, viewModelsFactory).get(persistentClass)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |