这是我在Java中的回调( future
是Mongo的SingleFutureResult):
future.register(new SingleResultCallback<ArrayList<Document>>() {
@Override
void onResult(ArrayList<Document> documents, MongoException e) {
//do something
}
})
使用Java 8,我可以使用Lambdas使它看起来像这样:
future.register((documents, e) -> {
//do something
});
整齐 . 但是,我想在Groovy类中调用该Java方法 . 我知道Groovy当前不支持jdk8 lambda的语法,但是文档总是强调它们有闭包 . 如果我尝试在这种情况下使用闭包它失败,因为闭包的类型为 Closure
,而不是类型 SingleResultCallback
. 有没有办法让像一个不同类型的闭包?有没有其他方法可以很好地完成这项工作?我知道我可以使用第一个解决方案,但在groovy类中看起来很奇怪 .
1 回答
使用Groovy的闭包语法:
如果
register
方法重载存在歧义,则在闭包声明后可能需要as SingleResultCallback
:这是一个含糊不清的场景:
哪个失败了:
如果
SingleResultCallback
有多个方法,那么 Map 强制是处理它的好方法: