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

如果您知道event将始终是 a GridWrapperEvent,则可以忽略该警告。否则,您可以将演员表(以及取决于它的逻辑)包装在检查中,例如

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

事实上你已经在这样做了,但是对于(我假设)更通用的WrapperEvent类。也许您可以调整该检查而不是添加新检查。

于 2012-07-27T08:29:48.240 回答