Java 在未来的执行中挣扎

Java 在未来的执行中挣扎,java,future,deferred,completable-future,Java,Future,Deferred,Completable Future,我有一个问题,我需要连续进行几个API调用并返回一个特定的对象类型 我不知道我应该如何用未来来解决这个问题。getSomeDetails的返回类型必须是ObjectB,但我不能返回该类型,除非我掌握了ObjectA,它包含额外的数据 什么是一个合适的方法来实现这一点 public CompletableFuture<ObjectB> getSomeDetails(String someIdentifier) { // I need to return details from O

我有一个问题,我需要连续进行几个API调用并返回一个特定的对象类型

我不知道我应该如何用未来来解决这个问题。
getSomeDetails
的返回类型必须是ObjectB,但我不能返回该类型,除非我掌握了ObjectA,它包含额外的数据

什么是一个合适的方法来实现这一点

public CompletableFuture<ObjectB> getSomeDetails(String someIdentifier) {
  // I need to return details from ObjectB (getObjectBDetails)
  // But can only get those, after getting ObjectA, which has additional data.
}

public CompletableFuture<ObjectA> getObjectADetails(String someIdentifier) {
  return ObjectA;
}

public CompletableFuture<ObjectB> getObjectBDetails(ObjectA) {
   ObjectB = someService.get(ObjectA.someImportantProperty)
   return objectB;
}
public CompletableFuture getSomeDetails(字符串someIdentifier){
//我需要从ObjectB返回详细信息(getObjectBDetails)
//但只能在获取ObjectA后获取这些数据,ObjectA具有附加数据。
}
public CompletableFuture getObjectADetails(字符串标识符){
返回对象a;
}
公共CompletableFuture getObjectBDetails(ObjectA){
ObjectB=someService.get(ObjectA.someImportantProperty)
返回对象b;
}

你大部分时间都在那里:怎么样

import static java.util.concurrent.CompletableFuture.completedFuture;

public CompletableFuture<ObjectA> getObjectADetails(String someIdentifier) {
    return completedFuture(new ObjectA(someIdentifier));
}

public CompletableFuture<ObjectB> getObjectBDetails(ObjectA a) {
    return completedFuture(new ObjectB(a));
}

public CompletableFuture<ObjectB> getSomeDetails(String someIdentifier) {
    return getObjectADetails(someIdentifier)
        .thenCompose(this::getObjectBDetails);
}

public void run() throws Exception {
    System.out.println(getSomeDetails("request").get().toString());
}
public CompletableFuture<ObjectB> getObjectBDetails(final ObjectA a) {
    final CompletableFuture<ObjectB> promise = new CompletableFuture<>();
    new Thread(() -> {
      // work to be done..  then:
      promise.complete(a);
    }).start();
    return promise;
}