我想实现看起来像这样的回调系统(伪代码):
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可能尚未初始化”
问题:我怎么能绕过这个,最后在回调中找不到内容并且没有这个错误?
答案 0 :(得分:2)
将您的代码更改为:
authDelegate.unsetMsgListener(this);
this
引用当前对象(在执行此语句时onMsgNotify()
正在执行)。
注意:虽然变量wml
可用于新对象,但在创建对象时尚未初始化,因此错误。它在完全创建对象后立即初始化。