Квадратные скобки после вызова функции - PullRequest
4 голосов
/ 28 июня 2019

В 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]
}

Что именно это делает? Автоматически приведение к этому типу? (это не массив / список, предполагающий, что он вызывает get)

Можете ли вы привести пример, где это полезно?

1 Ответ

6 голосов
/ 28 июня 2019

Этот код может выглядеть странно, но на самом деле это просто способ вызова 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...