我有两个类 -FindBugs的BC_UNCONFIRMED_CAST警告
class A {}
class B extends A {}
而且我这样做 -
A a = new B();
if(a instanceof B){
doSomething((B) a); // type case a to B
}
DoSomething的方法是这样的 -
public void doSomething(B b) { .. }
FindBugs的上面没有提出警告码。但是,如果我更改这样的代码 -
class A {
public boolean isOfTypeB() {
return this instanceof B;
}
}
class B extends A {}
A a = new B();
if(a.isOfTypeB()){
doSomething((B) a); // BC_UNCONFIRMED_CAST warning
}
Findbugs引发错误BC_UNCONFIRMED_CAST。在这两个实现中我看不出什么区别。任何建议,我错过了什么?
如果(a.isOfTypeB())或doSomething((B)a))在行上引发错误? – algorithmic
它是在doSomething((B)a)行上提出的。更新了问题 – Kevindra
findbug可能无法确定方法调用isOfTypeB是否为检查实例。 – algorithmic