考虑以下代码:
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 是这么说的:
未检查/未确认演员表 此演员阵容未经检查,并非全部 所转换类型的实例可以转换为它正在转换的类型 投射到。确保您的程序逻辑确保此转换将 不会失败。
如果您知道
event
将始终是GridWrapperEvent
,则可以忽略该警告。否则,您可以将强制转换(以及依赖于它的逻辑)包装在像这样的检查中
if (event instanceof GridWrapperEvent) {
// ...
}
事实上,您已经在这样做了,但是对于(我认为)更通用的
WrapperEvent
类。也许您可以调整该检查而不是添加新的检查。
您可以使用
spotbugs-exclude.xml
跳过误报警告
<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
<Match>
<!-- Unchecked cast warning -->
<Bug pattern="BC_UNCONFIRMED_CAST"/>
<Class name="com.example.MyClass"/> <!-- Specify your class name -->
<Method name="someMethod"/> <!-- Specify your method name -->
</Match>
</FindBugsFilter>