gpt4 book ai didi

android - Kotlin 使用具体化获取泛型类型类

转载 作者:行者123 更新时间:2023-11-29 15:36:23 27 4
gpt4 key购买 nike

我刚刚开始使用 Kotlin 而不是 Java,并且正在努力进行可靠的工作来检索泛型类型类。这是我的用例

abstract class BaseDataFragment<VM : BaseViewModel> : BaseFragment()
{
@Inject
protected lateinit var viewModelProvider: ViewModelProvider
protected lateinit var viewModel: VM

@CallSuper
override fun init(savedInstanceState: Bundle?)
{
viewModel = viewModelProvider.get(getViewModelClass())
}

private inline fun <reified T : ViewModel> getViewModelClass():Class<T> = T::class.java
}

不幸的是,我从 getViewModelClass() 收到错误:

Cannot use 'VM' as reified type parameter. Use a class instead.

有什么办法让它发挥作用吗?

最佳答案

reified 并不是类型删除的神奇解决方法。 JVM 上泛型类的实例不携带有关其实例化的类型参数的任何信息。由于信息不存在,因此无法使用 reified 来访问它。

reified 仅当编译时调用站点的类型信息已知时才有效,但此处的情况并非如此。

如果您希望能够做到这一点,您需要将 ClassKClass 存储为类的属性,或者创建一个虚拟方法获取每个派生类的 ClassKClass 实例。

关于android - Kotlin 使用具体化获取泛型类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48955699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com