【问题标题】:Type mismatch ERROR when using recover()使用recover() 时输入不匹配错误
【发布时间】: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&lt;Results.Status&gt; to F.Promise&lt;Result&gt; 而第二个没有。仅在使用 recover() 函数时才会发生这种情况。

另一方面,sbt 编译代码时不会报错。

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



对于其他搜索 -> 原因:

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

【问题讨论】:

    标签: java playframework lambda java-8 playframework-2.3


    【解决方案1】:

    在 Play Framework 中有一个与此相关的bug,但从讨论来看,这似乎是 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(); 也可以。

    【讨论】:

    • 如果可行,bool -&gt; (Result)ok() 应该也可以,不是吗?但这是我第一次听说 Java 应该有协变返回类型的问题。我可以理解,如果这是一个 Eclipse 问题,因为它与 Java 8 有很多问题,但总体上指责 Java 似乎是一个薄弱的主张。也许了解ok() 方法的来源以及它的签名是什么样子会有所帮助……
    • 确实(结果) ok() 也可以。你对 Java 的抨击可能是对的……如果我发现了什么,我会调查并返回更新。
    • 另一方面,我们可以将 Java 中的类型推断归咎于整体。不是最锋利的铅笔……
    • 已调查 -> 为我的问题添加了理由。也许您也可以将其添加到您的答案中。冗余 FTW!
    猜你喜欢
    • 2023-03-13
    • 2012-07-01
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    相关资源
    最近更新 更多