我正在尝试将函数作为参数传递给类扩展方法。
做的时候
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
参数的地图,我就会卡住。
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<Business> {
// do something with any as MultiMap
return Business.findAllBusinesss();
}
}
工作,但IntelliJ说类型不匹配
知道我应该如何将需要参数的函数传递给类扩展方法以及我应该如何调用它?
答案 0 :(得分:4)
答案 1 :(得分:0)
这样称呼:
WebDriver