考虑使用Play Framework2.3.8编写的以下2个控制器
Java8 lambdas:
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不加抱怨地编译代码。
问题:为什么会发生这种情况,以及如何解决这个问题?
对于其他搜索-> 原因的人:
发布于 2015-03-31 10:12:09
在Play框架中有一个与此相关的错误,但从讨论中看,这似乎更多地是一个Java问题,而不是其本身。解决办法应该是这样的(归功于伊格马尔):
return promiseBool.map(new Function<Boolean, Result>() {
@Override
public Result apply(Boolean bool) throws Throwable {
Result res = ok();
return res;
}
}).recover(new Function<Throwable, Result>() {
// Same
});使用return (Result) ok();也可能有效。
https://stackoverflow.com/questions/29365368
复制相似问题