传递给 singleArgViewModelFactory 时 ::MainViewModel 是什么意思
what does the ::MainViewModel mean when pass to the singleArgViewModelFactory
在 kotlin 协程实验室样本中,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
}
}
}
}
::MainViewModel
是一个 function reference。对于类型为 (A) -> T
的参数,它基本上是对接受类型为 A
的参数并传递 T
的函数(在本例中为构造函数)的引用(在本例中为 MainViewModel
本身)。
将参考与其实际对应物进行比较:
val ref : (A) -> T = ::MainViewModel
val ref : (A) -> T = { MainViewModel(it) } // or: = { anA : A -> MainViewModel(anA) }
在 kotlin 协程实验室样本中,https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#6
它通过传递 MainViewModel.FACTORY(repository)
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
}
}
}
}
::MainViewModel
是一个 function reference。对于类型为 (A) -> T
的参数,它基本上是对接受类型为 A
的参数并传递 T
的函数(在本例中为构造函数)的引用(在本例中为 MainViewModel
本身)。
将参考与其实际对应物进行比较:
val ref : (A) -> T = ::MainViewModel
val ref : (A) -> T = { MainViewModel(it) } // or: = { anA : A -> MainViewModel(anA) }