У меня есть BaseActivity в моем проекте, и одной из его задач является создание экземпляров ViewModels в Acvities. Это выглядит так:
abstract class BaseActivity<VM : ViewModel>(clazz: KClass<VM>) :
AppCompatActivity() {
@Inject
protected lateinit var viewModelFactory: ViewModelProvider.Factory
protected val viewModel by lazy {
ViewModelProviders
.of(this, viewModelFactory).get(clazz.java)
}
}
А затем MyActivity расширяет его:
class MyActivity : BaseActivity<MyViewModel>(MyViewModel::class) {
...
fun doSomething() {
viewModel.someMethodSpecifToMyViewModel()
}
}
Как вы можете видеть, мне нужно передать MyViewModel как класс, чтобы я мог использовать его на ViewModelProviders, но мне также нужно передать его как тип, так что моя viewModel приведена к правильному ViewModel, и я могу использовать его собственные методы.
Это отлично работает и все, но меня действительно беспокоит то, что я должен передать MyViewModel два раза моей BaseActivity.
Есть ли способ, которым я могу передать только его как тип или класс и все еще заставить работать?