这个错误意味着什么,我的代码有什么问题?

时间:2016-12-08 06:07:48

标签: java completable-future

我有以下功能:

  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;
      });
    });
  }

我得到的编译器错误是:

  

lambda表达式中的错误返回类型:无法转换列表   到你

return usersFresh

service.getUsers的方法签名是:

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

我不明白我的代码有什么问题以及无法编译的原因。

2 个答案:

答案 0 :(得分:1)

您需要使用CompletionStageCompletableFuture转换为toCompletableFuture,例如:

  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 :(得分:1)

与您的方法类似,希望返回ArrayList,但方法返回List

让我们看看:

CompletableFuture<T> implements CompletionStage

您的期望回归:

public CompletableFuture<List<String>> 

cacheFuture.thenCompose返回CompletionStage

你应该改变:

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