Можно ли вывести тип получателя функции более высокого порядка на основе параметров родительской функции? - PullRequest
0 голосов
/ 15 мая 2018

С учетом функции:

inline fun <T: Any> executeSomething(
    defaultValue: String,
    entity: T,
    maybeDefault: String = defaultValue,
    onSuccess: (T) -> Unit
)

Я хотел бы сделать вывод оSuccess, типе получателя T на основе параметров родительской функции или о чем-то подобном.

Это работает, компилятор выводит параметр получателя сущности в функции более высокого порядка onSucess как String:

val someEntity: String = "some text"
executeSomething("action", someEntity)
{entity -> print (entity)} //prints: "some text" - entity: String

Хотя я пытаюсь сделать так, чтобы функции старшего порядка определяли свой тип динамически, условно основываясь на значении параметра MaybeDefault, таким образом, применяя статический определенный тип.

Функция должна быть определена так:

fun <T: Any,V: Any> executeSomething(
    defaultValue: String,
    entity: T,
    maybeDefault: String = defaultValue,
    newReceiver: V = if (defaultValue == maybeDefault) newReceiver as T else newReceiver as Int,
    onSuccess: (V) -> Unit
)

И тогда компилятор должен успешно определить тип staticDefineType:

val someNotDefault: String = "not default"
val someEntity: String = "some text"
executeSomething("default", someEntity, someNotDefault)
{newInferred -> print (newInferred)} //prints: 1 - newInferred: Int 

возможно ли это в Котлине, какие альтернативы у меня есть?

...