java回调,在接口实现中取消描述监听器

时间:2012-06-07 16:47:34

标签: java callback

我想实现看起来像这样的回调系统(伪代码):

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可能尚未初始化”

问题:我怎么能绕过这个,最后在回调中找不到内容并且没有这个错误?

1 个答案:

答案 0 :(得分:2)

将您的代码更改为:

authDelegate.unsetMsgListener(this);

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

注意:虽然变量wml可用于新对象,但在创建对象时尚未初始化,因此错误。它在完全创建对象后立即初始化。