我想实现如下所示的回调系统(伪代码):
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/