Intereting Posts
SparkJava с использованием Kotlin и WebSockets Как «продолжить» или «ломать» в выражении `when` внутри цикла while, используя Kotlin Какие эквиваленты Java 8 Stream.collect доступны в стандартной библиотеке Kotlin? kotlin if (bar == null) vs. bar?: run Назначение и извлечение карты типов Kotlin: Невозможно ли переименовать карту с деструктивным входом? Ошибка? Соглашения об именах файлов для Kotlin String to Double на Android / Kotlin BottomNavigationView ссылку на ViewPager, когда я установил Listener в bottomNavigationView, мне нужно дважды щелкнуть, чтобы выполнить то, что я делаю Как использовать обертки вызова для Intent Anko? Dokka javadoc jar не работает с Intellij IDE Spring ConfigurationProperties и Kotlin? Может ли кто-нибудь здесь подробно описать структуру проекта приложения «Котлин / Родник»? Кроме того, особенности работы различных модулей Как получить исключение в init block kotlin Kotlin, Mockito и Android Test Instrumentation. Свойство Lateinit не было инициализировано

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