gpt4 book ai didi

java - 使用 recover() 时类型不匹配错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:20:54 25 4
gpt4 key购买 nike

考虑使用 Play Framework 2.3.8 编写的以下 2 个 Controller :

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 编写的 Controller 在 eclipse 中给我这个错误:Type mismatch: cannot convert from F.Promise<Results.Status> to F.Promise<Result>而第二个没有。只有在使用 recover() 时才会发生这种情况功能。

另一方面,sbt 毫无怨言地编译代码。

问题:为什么会发生这种情况,如何解决?



对于其他搜索 -> 原因:

基于 Salem's回答和this回答:这是一个 Eclipse 错误,与类型推断或其他<在这里插入您最喜欢的 Java bashing> 无关。

最佳答案

有一个bug在 Play Framework 中与此相关,但从讨论来看,这似乎更像是 Java 的问题,而不是 Play 本身。解决方法是这样的(归功于 igmar ):

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(); 也可能有效。

关于java - 使用 recover() 时类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29365368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com