函数调用后的方括号

时间:2019-06-28 07:10:12

标签: kotlin

PagingWithNetworkSampleRedditActivity.ktline 68中,是一个函数,该函数包含另一个函数调用,后跟square brackets and the class type(第78行):

private fun getViewModel(): SubRedditViewModel {
    return ViewModelProviders.of(this, object : ViewModelProvider.Factory {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            val repoTypeParam = intent.getIntExtra(KEY_REPOSITORY_TYPE, 0)
            val repoType = RedditPostRepository.Type.values()[repoTypeParam]
            val repo = ServiceLocator.instance(this@RedditActivity)
                    .getRepository(repoType)
            @Suppress("UNCHECKED_CAST")
            return SubRedditViewModel(repo) as T
        }
    })[SubRedditViewModel::class.java]
}

这到底是做什么的?自动转换为该类型? (假设它不是调用get的数组/列表)

您能举个例子吗?

1 个答案:

答案 0 :(得分:6)

该代码可能看起来很奇怪,但这实际上只是调用get()的一种方式。这将同样有效,但更为冗长:

private fun getViewModel(): SubRedditViewModel {
    return ViewModelProviders.of(this, object : ViewModelProvider.Factory {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            // ...
        }
    }).get(SubRedditViewModel::class.java)
}