在PagingWithNetworkSample的RedditActivity.kt的line 68中,是一个函数,该函数包含另一个函数调用,后跟square brackets and the class type(第78行):
private fun getViewModel(): SubRedditViewModel {
return ViewModelProviders.of(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
val repoTypeParam = intent.getIntExtra(KEY_REPOSITORY_TYPE, 0)
val repoType = RedditPostRepository.Type.values()[repoTypeParam]
val repo = ServiceLocator.instance(this@RedditActivity)
.getRepository(repoType)
@Suppress("UNCHECKED_CAST")
return SubRedditViewModel(repo) as T
}
})[SubRedditViewModel::class.java]
}
这到底是做什么的?自动转换为该类型? (假设它不是调用get
的数组/列表)
您能举个例子吗?
答案 0 :(得分:6)
该代码可能看起来很奇怪,但这实际上只是调用get()
的一种方式。这将同样有效,但更为冗长:
private fun getViewModel(): SubRedditViewModel {
return ViewModelProviders.of(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
// ...
}
}).get(SubRedditViewModel::class.java)
}