等待异步回调函数在java中返回

pra*_*ani 3 java asynccallback

final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {
   if(t) {
     plugin.setIsInstalled(Boolean.TRUE);             
   }
   return Void.TYPE;
};

foo.install(plugin,functionCallback);

if(plugin.getIsInstalled().getValue())
  return "done";
else 
  return "not done";
Run Code Online (Sandbox Code Playgroud)

if(plugin.getIsInstalled().getValue())一旦回调完成执行,我想检查一下。如何在回调完成执行之前阻止执行此 if 条件?

Lot*_*har 6

您可以使用FutureTask在回调函数中调用的 a :

final FutureTask<Object> ft = new FutureTask<Object>(() -> {}, new Object());
final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {
    if(t) {
        plugin.setIsInstalled(Boolean.TRUE);
        ft.run();
    }
    return Void.TYPE;
};

foo.install(plugin,functionCallback); 
ft.get();
if(plugin.getIsInstalled().getValue())
    return "done";
else 
    return "not done";
Run Code Online (Sandbox Code Playgroud)

Future.get等到run方法被调用,您还可以使用get接受超时的-method,以便您可以在花费太长时间时对此做出反应。