作者:手机用户2502877211 | 来源:互联网 | 2022-12-27 11:02
我试图通过在抽象基类中移动一些ViewModel实例来削减Dagger的样板,但是找不到一个很好的方法来做到这一点。我的目的是实例化我的基本片段中的所有ViewModel,以使它们可供所有子片段使用,而无需它们自己进行实例化。我的问题在于使用通用(VM)检索ViewModel-具体在此处:.get(viewModel::class.java)
。我也尝试.get(VM::class.java)
过不允许
基本片段
abstract class BaseFragment : Fragment() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel : VM
override fun onAttach(context: Context?) {
super.onAttach(context)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(viewModel::class.java)
}
}
ViewModelProviders.get(...)方法签名
public T get(@NonNull Class modelClass)
这有可能吗?
1> 小智..:
val viewModel: T by lazy {
ViewModelProviders.of(this).get(getTClass())
}
//????T?????
private fun getTClass(): Class {
return (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class
}