gpt4 book ai didi

java - 检索在匿名内部类回调中接收到的方法的结果?

转载 作者:行者123 更新时间:2023-11-30 07:24:29 26 4
gpt4 key购买 nike

我有一个小问题。

private boolean isSomethingTrue(String param) {
boolean result = false;
myService.hasAlerts(param,new Callback<Boolean>(
@Override
public void onSuccess(Boolean hasAlerts) {
result = hasAlerts;
}
});
return result;
}

在这段代码中,我如何返回在回调中收到的 boolean 值 h​​asAlerts?这不起作用,因为结果变量不是最终的。但是当它是最终的时,它不能被修改所以...

我做过这样的事情:

private boolean isSomethingTrue(String param) {
class ResultHolder {
boolean result=false;
}
final ResultHolder resultHolder = new ResultHolder();
myService.findBoolean(param,new Callback<Boolean>(
@Override
public void onSuccess(Boolean hasAlerts) {
resultHolder.result = hasAlerts;
}
});
return resultHolder.result;
}

但是有没有更简单的解决方案来处理这种情况?

我在尝试调用 GWT RPC 服务时发现了这个问题。

最佳答案

我能想到一些变化——它们都不是特别令人兴奋。如果可以在其他地方使用它,您可以将结果持有者和回调合并到一个类中并使其成为静态的,但这并不是真正的改进。

private boolean isSomethingTrue(String param) {
class MyCallback implements Callback<Boolean> {
boolean result = false;
@Override
public void onSuccess(Boolean hasAlerts) {
result = hasAlerts;
}
}
final MyCallback callback = new MyCallback();
myService.findBoolean(param, callback);
return callback.result;
}

你可以实现一个通用同步 Future ,但这可能会产生误导。

最后,如果您经常这样做,您可以泛化值持有者。

public class Result<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}

private boolean isSomethingTrue(String param) {
final Result<Boolean> result = new Result<Boolean>();
myService.findBoolean(param,new Callback<Boolean>(
@Override
public void onSuccess(Boolean hasAlerts) {
result.set(hasAlerts);
}
});
return result.get();
}

关于java - 检索在匿名内部类回调中接收到的方法的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474334/

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