如何避免使用与Type和Argument相同的类

时间:2019-06-06 00:38:35

标签: kotlin

我的项目中有一个BaseActivity,它的工作之一是实例化Acvities的ViewModel。它是这样的:

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上使用它,但是我还需要将其作为Type进行传递,因此我的viewModel被强制转换为正确的ViewModel,并且可以使用其自己的方法。

这一切正常,但确实让我感到困扰,我必须两次将MyViewModel传递给BaseActivity。

有什么办法可以仅将其作为类型或类传递,而仍然可以使事情正常工作吗?

0 个答案:

没有答案