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

Java 检索在匿名内部类回调中接收的方法的结果?,java,gwt,scjp,Java,Gwt,Scjp,我有个小问题 private boolean isSomethingTrue(String param) { boolean result = false; myService.hasAlerts(param,new Callback<Boolean>( @Override public void onSuccess(Boolean hasAlerts) { result = hasAlerts;

我有个小问题

private boolean isSomethingTrue(String param) {
    boolean result = false;
    myService.hasAlerts(param,new Callback<Boolean>(
        @Override
        public void onSuccess(Boolean hasAlerts) {
            result = hasAlerts;
        }
    });
    return result;
}
在这段代码中,如何返回回调中接收到的布尔hasAlerts? 这不起作用,因为结果变量不是final。 但当它是最终的,它不能被修改,所以

我做过类似的事情:

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;
}

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

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;
}

您需要的是一个同步RPC。请参见>此处您需要的是同步RPC。请参见>此处,您的逻辑不起作用。原因是在执行onSuccess方法之前返回结果,因为函数是异步的。@GaneshKumar-看起来hasAlerts不是异步的。它在返回之前调用onSuccess。在这种情况下,方法是同步的。否则就没有任何意义了你的逻辑不起作用。原因是在执行onSuccess方法之前返回结果,因为函数是异步的。@GaneshKumar-看起来hasAlerts不是异步的。它在返回之前调用onSuccess。在这种情况下,方法是同步的。否则就没有任何意义了,谢谢,这似乎是个好主意,因为我的方法是在这里知道我是否应该显示GWT按钮。因此,我想我可以直接在回调中添加创建按钮的代码,因为我将按钮添加到了一个全局变量中。谢谢,这似乎是个好主意,因为我的方法在这里知道是否应该显示GWT按钮。因此,我想我可以直接在回调中添加创建按钮的代码,因为我将按钮添加到了一个全局变量中。
if(isSomethingTrue("foo")) {
    doSomeCoolStuff();
}
isSomethingTrue("foo", new Callback<Boolean>(
    @Override
    public void onSuccess(Boolean result) {
        if(result) {
            doSomeCoolStuff();
        }
    }
});
private void isSomethingTrue(String param, Callback callback) {
    myService.hasAlerts(param,callback);
}