Java 在未来的执行中挣扎
我有一个问题,我需要连续进行几个API调用并返回一个特定的对象类型 我不知道我应该如何用未来来解决这个问题。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
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;
}