【发布时间】:2019-05-15 14:08:28
【问题描述】:
在 kotlin coroutines 实验室样本中,https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#6
它通过传递MainViewModel.FACTORY(repository)来创建viewModel
val viewModel = ViewModelProviders
.of(this, MainViewModel.FACTORY(repository))
.get(MainViewModel::class.java)
MainViewModel如下,不明白里面的::MainViewModel是什么语法
val FACTORY = singleArgViewModelFactory(::MainViewModel)
singleArgViewModelFactory 有构造函数:
singleArgViewModelFactory(constructor: (A) -> T)
哪个取函数(A) -> T,singleArgViewModelFactory(::MainViewModel)中的::MainViewModel是什么意思?
class MainViewModel(private val repository: TitleRepository) : ViewModel() {
companion object {
/**
* Factory for creating [MainViewModel]
*
* @param arg the repository to pass to [MainViewModel]
*/
val FACTORY = singleArgViewModelFactory(::MainViewModel)
}
......
}
fun <T : ViewModel, A> singleArgViewModelFactory(constructor: (A) -> T):
(A) -> ViewModelProvider.NewInstanceFactory {
return { arg: A ->
object : ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <V : ViewModel> create(modelClass: Class<V>): V {
return constructor(arg) as V
}
}
}
}
【问题讨论】:
-
很可能是对类的构造函数的函数引用。
-
@CommonsWare,还有EpicPandaForce,谢谢大家帮忙快速指点解释!
标签: android kotlin android-viewmodel android-architecture-lifecycle