我的项目中有一个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。
有什么办法可以仅将其作为类型或类传递,而仍然可以使事情正常工作吗?