1

次のようなコールバックのシステムを実装したいと思います(擬似コード):

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が初期化されていない可能性があります」

質問:これを回避して、最終的にコールバック内のスクライブを解除し、このエラーが発生しないようにするにはどうすればよいですか?

4

1 に答える 1

2

コードを次のように変更します。

authDelegate.unsetMsgListener(this);

this現在のオブジェクト(onMsgNotify()このステートメントの実行時に実行されているオブジェクト)を参照します。

:変数wmlは新しいオブジェクトで使用できますが、オブジェクトの作成時にまだ初期化されていないため、エラーが発生します。オブジェクトが完全に作成された直後に初期化されます。

于 2012-06-07T16:51:54.460 に答える