2

Eclipse で「null ポインター逆参照の可能性」に関する警告が表示されますが、その理由がわかりません。警告は、最後の行の次のコード スニペットで発生します。

public void addMessage(Message message) {
   WeakReference<MessagesPanelControl> view = null;
   [...]
   if(view != null && view.get() != null)
     view.get().updateView();
}

以前のチェックのおかげで、それが null になることはないと確信してviewいます。Eclipse の警告は次のとおりです。

バグ: 呼び出されたメソッドの戻り値が原因で、AC.GUI.MessageHandler.addMessage(Message) で null ポインターが逆参照される可能性がありますバグ: 呼び出されたメソッドの戻り値が原因で、AC.GUI.MessageHandler.addMessage(Message) で null ポインターが逆参照される可能性があります

有効な警告でない場合、どうすれば抑制できますか? @SuppressWarnings("all") でも機能しません。

4

2 に答える 2

7

ifステートメントとその本文の間に競合状態があります。

  • viewかどうかを確認しnullます。そうではありません。
  • view.get()(弱参照MessagesPanelControl) が であるかどうかを確認しnullます。そうではありません。あなたはif体に入ります。
  • ガベージ コレクタは、 内の値をクリアすることを決定しますview
  • でメソッドを呼び出しますがview.get()、これは現在nullです。

これを防ぐには、次のように弱参照を強参照に変換する必要があります。

if(view != null) {
    MessagesPanelControl mpc = view.get();
    if(mpc != null)
        mpc.updateView();
}
于 2013-10-17T09:46:14.067 に答える