【发布时间】:2016-06-25 11:44:56
【问题描述】:
我的 Java 代码大致如下:
public String render(String str) {
byte[] b = [serialize str]
client.sendRequest(b, new Callback<byte[]>() {
@Override
public void onDone(byte[] data) {
String res = [convert data back to String]
// TODO: return this string in the outer function
});
return "???";
}
我在让渲染函数返回我从 onDone 回调获得的字符串时遇到问题。我尝试在 sendRequest 调用之外初始化 String res,但我遇到了变量不是 final 的问题。
我也在阅读 Java Futures here。从那以后,我想我可以设置一个 Future 并调用 isDone() 以确保它已设置?但是这段代码看起来很冗长,我想知道是否有更简单的解决方案。
【问题讨论】:
-
这里不需要/相关的序列化。无论存在什么问题 - 范围/时间问题 - 将继续删除任何提及此类的内容。 IE。尝试“返回
data”,由于相同的概念原因,这将不起作用。使用一个异步代码,模型必须完全切换到异步模型(包括Futures,它只是推迟决策,或在回调中进一步处理)或使用同步方法(其中可以包括'同步等待异步方法完成')。
标签: java serialization callback