我正在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
}
}
});
现在,我见过的代码示例直接处理//做某事//部分的数据。我们与监督我的人进行了讨论,并且我认为我可以在成功时触发事件,并且当事件被触发时相应地加载页面。这是一个好主意吗?或者我应该坚持在内部功能中加载所有东西?让我对异步回调感到困惑的是,我只能在onSuccess函数中使用final变量,所以我宁愿不处理那里的东西 - 洞察力会受到赞赏。
谢谢!
答案 0 :(得分:1)
它只是标准的java为什么你只能在内部类中使用Final变量。 Here is a great discussion discussing this topic
当我使用AsyncCallback时,我完全按照你的建议,我通过GWT的EventBus发起一个事件。这允许我的应用程序的几个不同部分在用户登录时做出响应。
答案 1 :(得分:1)
由于内部类/匿名函数是在运行时生成的,因此需要对其访问的变量进行静态内存引用。将final写入变量使其内存地址静态,将其置于安全的内存区域。如果引用类字段,也会发生同样的情况。