首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递给singleArgViewModelFactory时::MainViewModel意味着什么

传递给singleArgViewModelFactory时::MainViewModel意味着什么
EN

Stack Overflow用户
提问于 2019-05-15 22:08:29
回答 1查看 297关注 0票数 2

在kotlin协程实验室smaple,https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#6

它通过传递MainViewModel.FACTORY(repository)来创建viewModel

代码语言:javascript
复制
val viewModel = ViewModelProviders
    .of(this, MainViewModel.FACTORY(repository))
    .get(MainViewModel::class.java)

MainViewModel如下所示,不了解

代码语言:javascript
复制
val FACTORY = singleArgViewModelFactory(::MainViewModel)

singleArgViewModelFactory具有构造函数:

代码语言:javascript
复制
singleArgViewModelFactory(constructor: (A) -> T)

哪个函数是(A) -> T的,singleArgViewModelFactory(::MainViewModel)中的::MainViewModel是什么意思?

代码语言:javascript
复制
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
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 22:12:36

::MainViewModel是一个function reference。对于(A) -> T类型的参数,它基本上是对一个函数(在本例中是构造函数)的引用,该函数接受A类型的参数并提供T (在本例中是MainViewModel本身)。

将引用与其实际对应项进行比较:

代码语言:javascript
复制
val ref : (A) -> T = ::MainViewModel
val ref : (A) -> T = { MainViewModel(it) } // or: = { anA : A -> MainViewModel(anA) }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56151362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档