如何存储Kotlin的KFunction1列表?

时间:2018-09-18 16:13:13

标签: generics kotlin

基本上我想创建一个可以通过以下方式使用的路由器

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 :(得分:0)

如果您只想注册和调用它们,请使用常规功能类型:(P) -> R,而不是KFunction1<P, R>

但是真正的问题是(P) -> R不是(IParam) -> IResponse的子类型(并且不可能是因为其invoke方法不接受任何IParam)并且因此无法存储在routeMap中。

如何解决此问题取决于类型不匹配时要发生的情况。