J'expérimente avec le Architecture Components de Google. Plus précisément, je veux mettre en œuvre un ViewModelProvider.Factory pour créer un ViewModel qui prend les paramètres du constructeur, comme ceci:Android ViewModelProviderFactory dans kotlin
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>?): T {
return MyViewModel(handler) as T
}
}
Mon ViewModel ressemble à ceci:
class MyViewModel(val handler: Handler) : ViewModel()
Tout le monde sait comment éviter le casting méchant à la fin :
return MyViewModel(handler) as T
vous faites un travail dangereux ... le code client attend un 'T extends ViewModel' mais vous donnez un' MyViewModel'. Lorsque le code client utilise un type spécifique de 'T', vous avez toujours une' ClassCastException', par exemple: 'val model: T = factory.create (T :: class.java)' –
C'est pourquoi je voudrais connaître un autre approche :) – Entreco
vous pouvez utiliser la réflexion pour instancier le 'ViewModel' ou utiliser le 3ème conteneur IoC pour créer' ViewModel'. –