kotlin 将返回类型更改为'T' errror

nuypyhwy  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(95)

我从ViewModelProvider.Factory覆盖此函数,但得到一个一般返回类型为T的错误。为什么?https://i.stack.imgur.com/H3Gmg.png

class NewsViewModelProviderFactory(
val newsRepository: NewsRepository) : ViewModelProvider.Factory {

override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    return NewsViewModel(newsRepository) as T
}

}

baubqpgj

baubqpgj1#

问题似乎来自于类型参数T的父类型-即ViewModel?

open fun <T : ViewModel> create(modelClass: Class<T>): T

注意,它写的是<T : ViewModel>,而不是<T : ViewModel?>,这意味着ViewModelProvider.Factory的任何使用者都希望create函数返回一个 non-nullViewModel,然而,您编写的create函数可能返回null。
如果将函数更改为

override fun <T : ViewModel> create(modelClass: Class<T>): T {
    return NewsViewModel(newsRepository) as T
}

这应该能缓解问题。

相关问题