Java 我应该如何在Runnable中设置我的未来结果?

Java 我应该如何在Runnable中设置我的未来结果?,java,android,future,Java,Android,Future,很抱歉,如果解决方案很琐碎,或者问题已经被提出,我将从Java开始,但我找不到这个问题的答案 基本上,我寻求一种未来/承诺机制,例如C++11。Android上的Java似乎不提供这种功能。我返回一个future,该值可以在以后由侦听器设置 以下是我正在努力解决的代码: class SettableFutureTask extends FutureTask<Boolean> { public void setValue (boolean value) { set (new

很抱歉,如果解决方案很琐碎,或者问题已经被提出,我将从Java开始,但我找不到这个问题的答案

基本上,我寻求一种未来/承诺机制,例如C++11。Android上的Java似乎不提供这种功能。我返回一个future,该值可以在以后由侦听器设置

以下是我正在努力解决的代码:

class SettableFutureTask extends FutureTask<Boolean> {
  public void setValue (boolean value) {
    set (new Boolean (value));
  }
}

Future<Boolean> future = new SettableFutureTask (new Runnable () {
  public void run () {
    ...
    mManager.setListener (new Listener (SettableFutureTask.this));
  }
});
return future;
类SettableFutureTask扩展了FutureTask{
公共void设置值(布尔值){
集合(新布尔值);
}
}
Future Future=new SettableFutureTask(new Runnable(){
公开作废运行(){
...
mManager.setListener(新侦听器(SettableFutureTask.this));
}
});
回归未来;
其目的是侦听器将设置未来的值,因此
SettableFutureTask
提供了一个公共
setValue()

这段代码的问题是从
Runnable
中的
run()
方法中访问
SettableFutureTask
的实例。我还试图重写一些Runnable和FutureTask类来达到这个目的,但没有成功


我怎样才能解决这个问题?谢谢,

如果您想从run()访问实例,您可以尝试将future声明为final,因此可以从方法的作用域中访问:

final Future<Boolean> future = new SettableFutureTask (new Runnable () {
  public void run () {
    ...
    mManager.setListener (new Listener (future));
  }
});
final Future=new SettableFutureTask(new Runnable(){
公开作废运行(){
...
mManager.setListener(新侦听器(未来));
}
});

编译失败,因为
变量future可能尚未初始化。您是对的,我误读了您的部分代码。是否有任何理由在run()方法中而不是在future的初始化之后设置侦听器?i、 e.
future=新设置的FutureTask(新…)。。。setListener(新侦听器(未来))可能发布完整的代码(尽可能)可能会有所帮助。在阅读您的评论时,我刚刚意识到“按代码”不会做我想做的事情:当退出
run()
时,未来将完成,这可能发生在侦听器有机会设置未来值之前。。。我所寻求的是返回一个未来,直到我的听众设定了它的价值;我使用
FutureTask
,因为它提供了
set()
来手动设置值,(而
Future
没有),这意味着使用
Runnable
,但是如果我可以避免
run()
,我肯定可以。然后您可能想看看管理阻塞的包。多亏了您,我还使用了一个
条件变量解决了最初的问题。更简单的方法。我不知道这是否是您所寻求的,但存在一个名为Bolt的库,它提供与javascript中承诺相同的功能。@cYrixmorten我不反对使用第三方库,但是这段代码在Cordova插件中,我不知道如何构建库并将库导入到我的项目中。