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 если у класса нет правильного конструктора.

Другие вопросы по тегам