首页 > 解决方案 > 如何避免使用与类型和参数相同的类

问题描述

我的项目中有一个 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,这让我很困扰。

有什么方法可以让我只将它作为类型或类传递并且仍然可以正常工作吗?

标签: kotlin

解决方案


推荐阅读