Lee*_*esh 3 java eclipse eclipse-plugin
我有一个必须返回布尔值的方法.该方法具有对run方法的异步调用.在run方法中,我必须在封闭方法中设置变量.下面是我的代码.
private boolean isTrue() {
boolean userAnswer;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
userAnswer = MessageDialog.openQuestion(new Shell(), "some message", "some question?");
}
});
return userAnswer;
}
Run Code Online (Sandbox Code Playgroud)
这段代码给出了错误 - "userAnswer"必须是最终的,如果我做到最后我不能为它分配一个值.请建议一种处理此方案的方法.
有很多模式可以实现这一点。也许最简单的方法是使用某种回调函数,例如:
interface Callback {
void onSuccess(boolean value);
}
private boolean isTrue(final Callback callback) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
boolean userAnswer = MessageDialog.openQuestion(new Shell(), "some message", "some question?");
callback.onSuccess(userAnswer);
}
});
Run Code Online (Sandbox Code Playgroud)
}
并像这样调用方法:
isTrue(new Callback() {
@Override
public void onSuccess(boolean value) {
// do some stuff
}
});
Run Code Online (Sandbox Code Playgroud)
您可以使用java.util.concurrent.FutureTask<V>如果您需要适应Callable<V>a Runnable.
public class UserQuestion implements Callable<Boolean> {
private String message;
private String question;
public UserQuestion(String message, String question) {
this.message = message;
this.question = question;
}
public Boolean call() throws Exception {
boolean userAnswer = MessageDialog.openQuestion(new Shell(),
message, question);
return Boolean.valueOf(userAnswer);
}
}
UserQuestion userQuestion = new UserQuestion("some message", "some question?");
FutureTask<Boolean> futureUserAnswer = new FutureTask<Boolean>(userQuestion);
Display.getDefault().asyncExec(futureUserAnswer);
Boolean userAnswer = futureUserAnswer.get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4745 次 |
| 最近记录: |