Kotlin - Можете ли вы явно указать тип возвращаемого значения для лямбды? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть интерфейс

private interface WithTokenExecutor<T> {
    fun execute(token: Token): Single<T>
}

и функция withToken, которая асинхронно получает токен доступа, а затем возвращает выполненный параметр WithTokenExecutor с новым токеном.

private fun <T> withToken(executor: WithTokenExecutor<T>): Single<T> { 
    return essentialApiTokenProvider.getTokenObservable(true) // returns an observable with the token
        .flatMap { token -> executor.execute(token)) }
}

Затем я вызываю функцию: тип возвращаемого значения функций withToken и WithTokenExecutor является стандартным c?

Я пытался сделать это:

return withToken({ token -> api.getDetails(token) })

, но компилятор говорит:

Type inference failed: fun <T> withToken(executor: StoreManager.WithTokenExecutor<T>):Single<T> cannot be applied to ((???) -> Single<AppsList>)

Есть ли способ явного определения возврата тип этих функций при сохранении лямбды?

1 Ответ

0 голосов
/ 07 февраля 2020

Если у вас есть возможность изменить объявление WithTokenExecutor на:

typealias WithTokenExecutor<T> = (t : Token) -> Single<T>

... вы сможете реализовать свой getAppData следующим образом:

fun getAppData(apps: List<String>): Single<AppsList> = withToken { api.getDetails(it) }

Если изменить объявление невозможно, кажется, что вам не повезло, пока Kotlin 1.4, как указывает @Pawel в комментариях.

...