首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用recover()时类型不匹配错误

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

Stack Overflow用户
提问于 2015-03-31 09:37:40
回答 1查看 296关注 0票数 3

考虑使用Play Framework2.3.8编写的以下2个控制器

Java8 lambdas:

代码语言:javascript
复制
public static Promise<Result> testLambda() {
    final Promise<Boolean> promiseBool = Promise.promise(() -> "TEST".equals("test"));

    return promiseBool.map(bool -> ok()).recover(t -> badRequest());
}

“正常”:

代码语言:javascript
复制
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不加抱怨地编译代码。

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

对于其他搜索-> 原因的人:

基于塞勒姆答案和答案:这是一个Eclipse ,与类型推断或其他无关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-31 10:12:09

在Play框架中有一个与此相关的错误,但从讨论中看,这似乎更多地是一个Java问题,而不是其本身。解决办法应该是这样的(归功于伊格马尔):

代码语言:javascript
复制
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();也可能有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29365368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档