8

我正在尝试使用 Google 的架构组件。具体来说,我想实现一个ViewModelProvider.Factory来创建一个带有构造函数参数的 ViewModel,如下所示:

class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>?): T {
        return MyViewModel(handler) as T
    }
}

我的 ViewModel 看起来像这样:

class MyViewModel(val handler: Handler) : ViewModel() 

任何人都知道如何避免最后的讨厌演员:

return MyViewModel(handler) as T
4

1 回答 1

13

你可以写:

class MyFactory(val handler: Handler) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return modelClass.getConstructor(Handler::class.java).newInstance(handler)
    }
}

这将适用于任何接受 a作为构造函数参数的类,并且如果该类没有正确的Handler构造函数,则会抛出。NoSuchMethodException

于 2017-08-05T02:05:20.913 回答