2016-12-08 8 views
0

私は、以下の機能を持っている:このエラーは何を意味し、私のコードに何が間違っていますか?

public CompletableFuture<List<String>> getUsers(final String users) { 
    final CompletionStage<List<String>> cacheFuture = cache.read(users.toString()); 

    return cacheFuture.thenCompose((List<String> userList) -> { 
     if (userList != null) { 
     return CompletableFuture.completedFuture(userList); 
     } 
     return service.getUsers(users).thenApply((List<String> usersFresh) -> { 
      cache.write(users.toString(), usersFresh); 
      return usersFresh; 
     }); 
    }); 
    } 

は、私が取得していますコンパイルエラーがある:ラムダ式で

悪い戻り値の型:リスト上のU

を変換することはできません線return usersFresh

のメソッドシグネチャは、次のとおりです。

CompletableFuture<List<String>> getUsers(String users);

私は私のコードと、なぜそれがコンパイルされませんと間違っているかを理解していません。あなたが好きな、toCompletableFutureを使用してCompletableFutureCompletionStageを変換する必要が

+0

'CACは何か彼は 'service.getUsers()'の 'cache.read()'と 'service'に入っていますか? – nullpointer

+0

ここで間違っていると思われることは、確実に 'return'ステートメントの使用になります。しかし、上記の変数についての詳細も追加することをあなたに待つでしょう。 – nullpointer

答えて

1

:それはあなたの方法と似ている

public CompletableFuture<List<String>> getUsers(final String users) { 
    final CompletionStage<List<String>> cacheFuture = cache.read(users.toString()); 


    return cacheFuture.thenCompose((List<String> userList) -> { 
     if (userList != null) { 
     return CompletableFuture.completedFuture(userList); 
     } 
     return service.getUsers(users).thenApply((List<String> usersFresh) -> { 
      cache.write(users.toString(), usersFresh); 
      return usersFresh; 
     }); 
    }).toCompletableFuture(); //!!! convert `CompletionStage` to `CompletableFuture` in here 
    } 
1

ArrayListが、メソッドの戻り値List中を返したいです。

見てみましょう:

CompletableFuture<T> implements CompletionStage 

は、あなたの期待リターン:あなたが変更する必要があります

public CompletableFuture<List<String>> 

しかしcacheFuture.thenComposeリターンCompletionStage

public CompletableFuture<List<String>> to public CompletionStage<List<String>> 
+0

あるいは、 'cacheFuture'の型を' CompletableFuture'に変更してください。あなたが提案したようにインターフェイスに対してコードを書くのが良いです。何とか私が見ているほとんどの例は、インターフェイスの代わりに実装を使用しています。 –

+0

はい特定の状況によってはオプションです – Jerry06

関連する問題