我正在尝试将函数作为参数传递给类扩展方法 .
做的时候
fun Router.handleJsonGet(path: String, method: () -> Any) {
this.get(path).handler {
it.response().putHeader("Content-Type", "application/json").end((gson.toJson(method())))
}
}
我可以轻松地在lambda中包装一个函数调用,一切正常 .
router.handleJsonGet("/business/list", { BusinessService.listBusinesses() })
现在我想要包含一个 GET params的 Map ,我就陷入了困境 .
fun Router.handleJsonGet(path: String, method: (any:Any) -> Any) {
this.get(path).handler {
val map: MultiMap = it.request().params() ?: MultiMap.caseInsensitiveMultiMap()
it.response().putHeader("Content-Type", "application/json").end((gson.toJson(method(map))))
}
}
我现在如何使用此方法扩展?当函数需要参数时,wrap-with-lambda技巧似乎不起作用 .
我期待的是:
router.handleJsonGet("/business/list", BusinessService::listBusinesses)
同
object BusinessService {
fun listBusinesses(any: Any) : List {
// do something with any as MultiMap
return Business.findAllBusinesss();
}
}
工作,但IntelliJ说类型不匹配
知道我应该如何将一个需要参数的函数传递给类扩展方法以及我应该如何调用它?