3

次のコードを検討してください。

 public void broadcast(FacesEvent event)
    throws AbortProcessingException {

    if(!(event instanceof WrapperEvent)) {
      super.broadcast(event);
      return;
    }

    // Sets up the correct context and fire our wrapped event.
    GridWrapperEvent revent = (GridWrapperEvent)event; // FindBugs is complaining here 
    int oldRowIndex = getRowIndex();
    int oldColumnIndex = getColumnIndex();
    boolean oldClientIdRewritting = clientIdRewritting;
    setClientIdRewritting(revent.isClientIdRewritting());

    setActiveCell(revent.getRowIndex(), revent.getColumnIndex());

    FacesEvent rowEvent = revent.getFacesEvent();
    rowEvent.getComponent().broadcast(rowEvent);
    setActiveCell(oldRowIndex, oldColumnIndex);
    setClientIdRewritting(oldClientIdRewritting);
  }

FindBugsはコメントされた行について不平を言っています。それについて私にできることはありますか?これはFindBugsが言うことです:

未チェック/未確認のキャスト このキャストはチェックされておらず、キャスト元のタイプのすべてのインスタンスをキャスト先のタイプにキャストできるわけではありません。プログラムロジックがこのキャストが失敗しないことを保証することを確認してください。

4

1 に答える 1

6

が常に であることがわかっている場合は、警告を無視できます。それ以外の場合は、キャスト (およびそれに依存するロジック) を次のようにチェック内にラップできます。eventGridWrapperEvent

if (event instanceof GridWrapperEvent) {
  // ...
}

実際、あなたはすでにこれを行っていますが、(私が推測する)より一般的なWrapperEventクラスのためです。おそらく、新しいチェックを追加する代わりに、そのチェックを適応させることができます。

于 2012-07-27T08:29:48.240 に答える