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

原文 标签 android kotlin android-viewmodel android-architecture-lifecycle

在 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 , ::MainViewModel 是什么意思在 singleArgViewModelFactory(::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
            }
        }
    }
}

最佳答案

::MainViewModelfunction 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/

相关文章:

android - 在 Firebase 上运行 Espresso 测试时出现 NoClassDefFoundError

android - RecyclerView OnClick位置

android-studio - 如何仅使用其路径将txt文件转换为字符串?

android - 在 Android Studio 3.3 Canary 3 Kotlin 项目上找不到符号 DataBindingComponent

android - 这是LiveData使用的正确方法吗?

android - Unresolved reference :viewModels

Android 架构组件 ViewModel - 与 Service/IntentService 通信

android - 我们还需要包括 `kapt com.android.databinding:compiler`

java - IndexOutOfBoundsException后检查

gradle - 为什么@DisplayName 在 JUnit 5 中对我不起作用?