gpt4 book ai didi

android - 当传递给 singleArgViewModelFactory 时,::MainViewModel 是什么意思

转载 作者:行者123 更新时间:2023-11-29 18:31:17 25 4
gpt4 key购买 nike

在 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) -> TsingleArgViewModelFactory(::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) }

关于android - 当传递给 singleArgViewModelFactory 时,::MainViewModel 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com