我想实现如下所示的回调系统(伪代码):

final Listener listener = ListenerCtrl.addListener(new Listener() {
  void onNotify(String response){
    ListenerCtrl.unsetListener(listener);
} }


此代码意味着,在收到消息后,我想取消以后的通知。我发现在回调内部执行此操作非常有吸引力。

这是我的实际实现:

final WebServiceMsgListener wml = new WebServiceMsgListener()
{
  public void onMsgNotify(JSONObject response, int ecode)
  {
    Log.v(TAG, "getSetStateProgressBar MSG_MGT_STATICINFO: onMsgNotify ecode" +
       ecode);
    authDelegate.unsetMsgListener(wml);
  }
};

authDelegate.addMsgListener(NAOMsg.MSG_MGT_STATICINFO, wml);


不幸的是,我当前的实现向我展示了eclipse错误:“本地变量wml可能尚未初始化”

问题:如何解决这个问题,最终取消回调的内部并且没有此错误?

最佳答案

将您的代码更改为:

authDelegate.unsetMsgListener(this);


this引用当前对象(在执行此语句时正在执行其onMsgNotify()的对象)。

注意:尽管变量wml可用于新对象,但在创建对象时尚未将其初始化,因此会出现错误。在完全创建对象后立即对其进行初始化。

关于java - Java回调,在接口(interface)实现内部取消监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10936223/

10-11 02:20