Android ViewModelProviderFactory в котлине
Я экспериментирую с компонентами архитектуры от Google. В частности, я хочу реализовать ViewModelProvider.Factory для создания ViewModel, который принимает параметры конструктора, например, так:
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()
Любой знает, как избежать неприятного броска в конце концов:
return MyViewModel(handler) as T
1 ответ
Решение
Вы могли бы написать:
class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return modelClass.getConstructor(Handler::class.java).newInstance(handler)
}
}
Это будет работать с любым классом, принимающим Handler
в качестве аргумента конструктора и бросит NoSuchMethodException
если у класса нет правильного конструктора.