函数调用后的方括号

Snu*_*ies 4 kotlin

PagingWithNetworkSample,在RedditActivity.kt线68是包含另一函数调用随后的功能方括号和类型(线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]
}
Run Code Online (Sandbox Code Playgroud)

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

您能否举一个有用的例子?

ord*_*lex 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)
}
Run Code Online (Sandbox Code Playgroud)