我正在试用来自Google的Architecture Components。具体来说,我想实现一个ViewModelProvider.Factory创建一个视图模型是需要构造函数的参数,就像这样:kotlin中的Android ViewModelProviderFactory
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>?): T {
return MyViewModel(handler) as T
}
}
我的视图模型是这样的:
class MyViewModel(val handler: Handler) : ViewModel()
任何人知道如何避免到底讨厌的投:
return MyViewModel(handler) as T
你正在做一个危险的工作......客户端代码期望一个'T扩展ViewModel',但你给一个'MyViewModel'。当客户端代码使用特定类型的'T'时,你总是得到'ClassCastException',例如:'val model:T = factory.create(T :: class.java)' –
这就是为什么我想知道替代方法:) – Entreco
你可以使用反射来实例化ViewModel或使用第三个IoC容器来创建ViewModel。 –