Как избежать использования того же класса, что и Type и Argument - PullRequest
2 голосов
/ 06 июня 2019

У меня есть 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.

Есть ли способ, которым я могу передать только его как тип или класс и все еще заставить работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...