Intereting Posts
libGDX не может выполнить действие Как использовать функцию «val ()» в Котлине? / расширить внешние классы JS Проверка метода Спящий режим Каков правильный способ использования сравнения «больше чем», «меньше» по сравнению с целыми числами с нулевым значением в Котлине? В тестовом пакете не читаются классы Котлина, определенные в основном пакете Выполнение Observable.fromCallable () с исключением Ошибка: выполнение выполнено для задачи ': app: compileDebugKotlinAfterJava' Не удается отправить многостраничные данные / данные формы с помощью Volley Kotlin: Объявление подклассов Activity static Невозможно использовать все параметры конфигурации с настраиваемой конфигурацией в градиенте с помощью kotlin-dsl AccessToken.getCurrentAccessToken () всегда возвращает null в Kotlin Каков правильный способ построить класс в Котлине? Большое время компиляции кода Kotlin в IntelliJ Кнопка Android Kotlin + диалог + список + список Почему я не получаю правильный результат, когда я использую оригинальную функцию parseList в Kotlin?

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 

Вы могли бы написать:

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