我正在試用來自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。 –