次の Android コードがあります。
public final List<MyObj> getList() {
Cursor cursor = null;
try {
final String queryStr = GET_LIST_STATEMENT;
cursor = db.rawQuery(queryStr, new String[] {});
List<MyObj> list = null;
//here I get the data from de cursor.
return list ;
} catch (SQLiteFullException ex) {
//do something to treat the exception.
} finally {
if (cursor != null) {
cursor.close();
}
}
}
このコードに対して PMD 分析を実行すると、次の問題が発生します。Found 'DD'-anomaly for variable 'cursor' (lines '182'-'185').
- 行 182 は次のとおり
Cursor cursor = null;
です。 - 185 行目は次のとおりです。
cursor = db.rawQuery(queryStr, new String[] {});
したがって、問題は182行目で早期初期化を行っていることだと理解していますが(182行目と185行目の間の変数を読み取ったことはありません)、そうしないとコードを取得できませんcursor
finally ブロックで を閉じます。
この場合どうすればいいですか?この PMD の問題を無視しますか? この特定の種類の DD 異常 (すべての DD 異常ではない) が発生しないように PMD を構成できますか? PMD は、この問題を起こさないほど十分にスマートであるべきですか?
私が考える DD 異常の別の例は、実際の問題ではありません。
Date distributeDate;
try {
distributeDate = mDf.parse(someStringDate);
} catch (ParseException e) {
Log.e("Problem", "Problem parsing the date of the education. Apply default date.");
distributeDate = Calendar.getInstance().getTime();
}
この場合、異常はdistributeDate
変数で発生します。