java-8 - Play 2.5 Java 8 错误 - 错误数量的类型参数和此处不需要的 lambda 表达式错误

标签 java-8 playframework-2.5

我正在尝试从 Play 2.4 升级到 Play 2.5。使用 Replaced F.Promise with Java 8's CompletionStage 中的指南,我替换了F.Promise , map ,和flatMap使用上一个链接中建议的替换(下面反射(reflect)了更改的片段)。

  public CompletionStage<Result> parallel() {
    final long start = System.currentTimeMillis();
    final CompletionStage<WSResponse, Long> getLatency = resp -> System.currentTimeMillis() - start;

    CompletionStage<Long> googleLatency = WS.url("http://google.com").get().thenApplyAsync(getLatency);
    CompletionStage<Long> yahooLatency = WS.url("http://yahoo.com").get().thenApplyAsync(getLatency);

    return googleLatency.thenComposeAsync(googleResponseTime ->
            yahooLatency.thenApplyAsync(yahooResponseTime ->
                ok(format("Google response time:  %d; Yahoo response time:  %d",
                    googleResponseTime, yahooResponseTime)))
    );
  }

运行后./activator clean dist ,我收到以下错误:

[error] /Play-2-JS-2.5/app/controllers/Java8Controller.java:74: wrong number of type arguments; required 1 [error] CompletionStage [error] /Play-2-JS-2.5/app/controllers/Java8Controller.java:74: lambda expression not expected here [error] resp -> System.currentTimeMillis() - start

出于某种原因,它认为 CompletionStage<WSResponse, Long> getLatency 中应该只有一个而不是两个。部分,而且出于某种原因,它不喜欢 lambda 表达式,尽管新 api 替换之前的语法在 Play 2.4 中成功运行。

我尝试切换回旧调用 https://github.com/btgrant-76/Play-2-Java-Scala-Java-8-Async-Comparison/blob/6a85cf31cfb804ef20bacf8e14d30ce46cc9307c/app/controllers/Java8Controller.java#L71-L83 中显示的内容然而它并没有带来任何更好的结果。一直在谷歌上搜索,但不知道如何解决这个问题。任何带有可能示例的建议将不胜感激。

最佳答案

替换

final CompletionStage<WSResponse, Long> getLatency = resp ->
        System.currentTimeMillis() - start;

final Function<WSResponse, Long> getLatency = resp -> System.currentTimeMillis() - start;

因为 CompletionStage 接口(interface)中的 thenApplyAsync 方法接受 java.util.Function

希望这有帮助。
祝你好运

关于java-8 - Play 2.5 Java 8 错误 - 错误数量的类型参数和此处不需要的 lambda 表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41581697/

相关文章:

java - Java 8 默认方法会破坏源代码兼容性吗?

java - 将 OptionalDouble 转换为 Optional <java.lang.Double>

java - 通过授权限制对 Play Framework 中方法的访问 - Java

scala - 如何在使用 Play Framework 处理文件后立即删除文件

jpa - 在 Play JPA 项目中使用 sbt-native-packager 将自定义文件夹添加到 Docker

Java 8 方法引用类型推断

java - listFiles 的方法引用

java - 如何在 Play Framework 2.5 模板中注入(inject)应用程序

java - Playframework + Akka : how to avoid excuting scheduled tasks executed when shutdown application

Java 8 将列表流放入具有相同值的映射中