【问题标题】:Asynchronous Callback in GWT - why final?GWT 中的异步回调 - 为什么是 final?
【发布时间】:2011-03-12 20:41:37
【问题描述】:

我正在 GWT 中开发一个应用程序作为我的学士论文,我对此相当陌生。我在互联网上研究了异步回调。我想做的是:如果他们是管理员或普通用户,我想处理用户的登录并显示不同的数据。

我的电话是这样的:

serverCall.isAdmin(new AsyncCallback<Boolean>() {
        public void onFailure(Throwable caught) {
            //display error
        }

        public void onSuccess(Boolean admin) {
            if (!admin){
                //do something 
            }
            else{
                //do something else
            }

        }
    });

现在,我看到的代码示例直接处理 //do something// 部分中的数据。我们与监督我的人讨论了这个问题,我的想法是我可以在成功时触发一个事件,并在触发该事件时相应地加载页面。这是一个好主意吗?还是我应该坚持在内部函数中加载所有内容?让我对异步回调感到困惑的是,我只能在 onSuccess 函数中使用 final 变量,所以我宁愿不在那里处理事情——我们将不胜感激。

谢谢!

【问题讨论】:

    标签: asynchronous event-handling final gwt-rpc


    【解决方案1】:

    由于它是在运行时生成的内部类/匿名函数,它需要对其访问的变量进行静态内存引用。把 final 放到一个变量上,它的内存地址是静态的,把它放到一个安全的内存区域。如果您引用一个类字段,也会发生同样的情况。

    【讨论】:

      【解决方案2】:

      这只是标准 java 为什么你只能在内部类中使用 Final 变量。 Here is a great discussion discussing this topic.



      当我使用 AsyncCallback 时,我完全按照您的建议进行操作,我通过 GWT 的 EventBus 触发了一个事件。这允许我的应用程序的多个不同部分在用户登录时做出响应。

      【讨论】:

        猜你喜欢
        • 2011-01-27
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 2017-03-20
        • 1970-01-01
        相关资源
        最近更新 更多