私はGoogleのArchitecture Componentsを試しています。Android ViewModelProviderFotory in kotlin
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>?): T {
return MyViewModel(handler) as T
}
}
私のViewModelには、次のようになります:
class MyViewModel(val handler: Handler) : ViewModel()
誰もが最終的に厄介なキャストを回避する方法を知っている具体的に私は、コンストラクタのパラメータを取りますので、同様のViewModelを作成するViewModelProvider.Factoryを実装したいです:
return MyViewModel(handler) as T
あなたは危険な作業をしています...クライアントコードは 'T extends ViewModel'を期待しますが、あなたは' MyViewModel'を与えます。クライアントコードが特定の型の 'T'を使用するときは、' ClassCastException'を常に持っています。例えば: 'val model:T = factory.create(T :: class.java)' –
これは、アプローチ: – Entreco
あなたは 'ViewModel'をインスタンス化するためにリフレクションを使うことができ、' ViewModel'を作るために3番目のIoCコンテナを使うことができます。 –