2017-01-11 4 views
2

Play 2.4からPlay 2.5にアップグレードしようとしています。 Replaced F.Promise with Java 8's CompletionStageのガイドを使用して、F.Promise,map、およびflatMapを、前のリンクからの推奨置き換え(以下の変更のスニペットを反映)と置き換えました。Java 2.5のPlay 2.5エラー - ここではタイプ引数とラムダ式の番号が間違っていますエラー

[エラー] /Play-2-JS-2.5/app/controllers/Java8Controller.java:74:

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を実行した後、私は下のエラーを取得していますが間違った番号を型引数。 [エラー] CompletionStage [エラー] /Play-2-JS-2.5/app/controllers/Java8Controller.java:74:ラムダ式はここでは期待しない [エラー] resp - > System.currentTimeMillis() - 開始

CompletionStage<WSResponse, Long> getLatencyセクションには2つではなく、1つだけでなく、何らかの理由でラムダ式が好きではないと考えられます。ただし、Play 2.4で新しいAPI置換の前の構文は正常に機能しました。

私はhttps://github.com/btgrant-76/Play-2-Java-Scala-Java-8-Async-Comparison/blob/6a85cf31cfb804ef20bacf8e14d30ce46cc9307c/app/controllers/Java8Controller.java#L71-L83に表示されているものへの古い呼び出しに切り替えようとしましたが、それ以上の結果は得られません。グーグルで検索して、いつか検索していますが、これにどう対処するかはわかりません。可能性のある例を示唆しています。

答えて

2

CompletionStageインタフェースでthenApplyAsync metodがjava.util.Function

は、この情報がお役に立てば幸い受け入れるため、

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

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

を交換してください。
幸運

+1

それは、あなたに感謝Tanmayパティル! – gitness

+1

助けてくれてうれしい –

関連する問題