gpt4 book ai didi

java - 从回调中返回字符串 - Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:01 24 4
gpt4 key购买 nike

有谁知道如何解决以下问题。我想从回调中返回一个字符串,但我只得到“无法分配最终局部变量 s,因为它是在封闭类型中定义的”,因为 final.

 public String getConstraint(int indexFdg) {
final String s;
AsyncCallback<String> callback = new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
caught.printStackTrace();
}

public void onSuccess(String result) {
s = result;
}
};
SpeicherService.Util.getInstance().getConstraint(indexFdg, callback);
return s;
}

最佳答案

异步回调的全部意义在于在未来某个时间通知您异步发生的事情。你不能返回 s来自 getConstraint如果要在方法运行结束后设置它。

在处理异步回调时,您必须重新考虑程序的流程。而不是 getConstraint返回一个值,将继续使用该值的代码应该作为回调的结果被调用。

作为一个简单(不完整)的示例,您需要更改此设置:

 String s = getConstraint();
someGuiLabel.setText(s);

像这样:

 myCallback = new AsyncCallback<String>() {
public void onSuccess(String result) {
someGuiLabel.setText(result);
}
}
fetchConstraintAsynchronously(myCallback);

编辑

一个流行的替代方案是 future 的概念。 Future 是一个你可以立即返回的对象,但它只会在未来的某个时间点具有值(value)。它是一个容器,您只需要在请求它的时候等待它的值。

您可以将持有 future 视为持有您正在干洗的西装的票。您可以立即拿到票,可以将它放在钱包里,也可以送给 friend ……但是一旦您需要将它换成真正的西装,您需要等到西装准备好。

Java 有这样一个类( Future<V> )被ExecutorService API 广泛使用。 .

关于java - 从回调中返回字符串 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com