こんにちは、Findbugs によって NP_GUARANTEED_DEREF の問題があると報告されているコードを入手しました。今私のコードを見て、何が問題なのかよくわかりません。誰でも問題が何であるかを提案できますか?
public void test() {
String var = "";
int index = 2;
if (index == -1) {
var = String.class.getName();
if (var.length() == 0) {
var = null;
}
} else {
var = Integer.class.getName();
if (var.length() == 0) {
var = null;
}
}
if (var == null) {// FINBUGS reports on this line NP_GUARANTEED_DEREF
/*
* There is a statement or branch that if executed guarantees that a value
* is null at this point, and that value that is guaranteed to be
* dereferenced (except on forward paths involving runtime exceptions).
*/
throw new NullPointerException("NULL");
}
}
Findbugs のエラーを掘り下げるとvar = null;
、バグの原因として 2 つの割り当てが強調表示されますが、その理由はよくわかりません。var
オブジェクトに対して実際に何かを行っているわけではなく、Null チェックを行っているだけです。この例は実際の製品コードから取られていますが、エラーを再現するために必要のないものはすべて削除されています。これが誤検知かどうか疑問に思っていること。そうでない場合、適切な修正は何でしょうか。
Findbugs バグの詳細へのリンクは次のとおりです: http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF
[更新] この問題に関するフィードバックを受け取った後、Sourceforge の Findbugs Bugtracker に誤検知として記録しました。リンクはhttps://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693
問題についての会話はそこで続きます。