【发布时间】:2015-03-31 09:37:40
【问题描述】:
考虑以下 2 个使用 Play Framework 2.3.8 编写的控制器:
Java8 lambda:
public static Promise<Result> testLambda() {
final Promise<Boolean> promiseBool = Promise.promise(() -> "TEST".equals("test"));
return promiseBool.map(bool -> ok()).recover(t -> badRequest());
}
“正常”:
public static Promise<Result> test() {
final Promise<Boolean> promiseBool = Promise.promise(new Function0<Boolean>() {
@Override
public Boolean apply() throws Throwable {
return "TEST".equals("test");
}
});
return promiseBool.map(new Function<Boolean, Result>() {
@Override
public Result apply(Boolean bool) throws Throwable {
return ok();
}
}).recover(new Function<Throwable, Result>() {
@Override
public Result apply(Throwable t) throws Throwable {
return badRequest();
}
});
}
使用 lambdas 编写的控制器在 Eclipse 中给了我这个错误:Type mismatch: cannot convert from F.Promise<Results.Status> to F.Promise<Result> 而第二个没有。仅在使用 recover() 函数时才会发生这种情况。
另一方面,sbt 编译代码时不会报错。
问题:为什么会发生这种情况以及如何解决?
对于其他搜索 -> 原因:
基于Salem's 答案和this 答案:这是一个Eclipse 错误,与类型推断或其他插入您无关最喜欢的 Java 抨击在这里>。
【问题讨论】:
标签: java playframework lambda java-8 playframework-2.3