2012-07-27 3 views
3

다음 코드를 고려 FindBugs에 의해 불평 : 체크되지 캐스팅

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의 말씀입니다 :

체크되지 않은/확인되지 않은 캐스트이 주조를 선택 해제 , 그것은에 캐스트되고있는 형식으로 캐스팅 할 수 있습니다에서 주조 유형의 모든 인스턴스. 프로그램 논리에 따라이 캐스트가 이 실패하지 않도록하십시오. 당신은 항상 GridWrapperEvent 될 것event 것을 알고 경우

답변

6

것은, 당신은 경고를 무시할 수 있습니다. 그렇지 않으면 사실

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

이미이 일을있는 것처럼 체크 내부 캐스트 (과에 따라 논리를) 포장 할 수 있지만 (나는 가정) 더 일반적인 WrapperEvent 클래스. 아마도 새 검사를 추가하는 대신 해당 검사를 적용 할 수 있습니다.

관련 문제