Как сохранить список KFunction1 для kotlin? - PullRequest
0 голосов
/ 18 сентября 2018

В основном я хочу создать маршрутизатор, который можно использовать следующим образом:

router.register(someInstance::getData)
router.register(someInstance::submitData)

, где getData и submitData являются экземпляром

getParam : KFunction1<GetParam, GetResponse> 
submitData : KFunction1<SubmitParam, SubmitResponse>

, где GetParam, GetResponse,SubmitParam, SubmitResponse - это класс, который реализует соответствующие интерфейсы (IParam, IResponse)

внутри регистра, это выглядело бы как

val routeMap = mutableMapOf<String, KFunction1<IParam, IResponse>
fun register<P : IParam, R : IResponse>(func : KFunction1<P, R>) {
    routeMap["abc"] = func
}

, единственная проблема сейчас заключается в том, что мне кажется, что я не могуполучить прямой доступ к KFunction1 (поэтому я не могу их сохранить)

Идея состоит в том, чтобы создать какой-то маршрутизатор, который мог бы регистрировать и вызывать зарегистрированные функции позже.Если у кого-то есть какие-либо идеи о том, как это реализовать, не стесняйтесь давать предложения

1 Ответ

0 голосов
/ 18 сентября 2018

Если вы просто хотите зарегистрироваться и вызвать их, используйте обычные типы функций: (P) -> R, а не KFunction1<P, R>.

Но реальная проблема в том, что (P) -> R не является подтипом (IParam) -> IResponse (и не может быть, потому что его invoke метод не принимает IParam) и поэтому не может бытьхранится в routeMap.

Как это исправить, будет зависеть от того, что вы хотите сделать, когда типы не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...