我有以下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').
Cursor cursor = null;
。cursor = db.rawQuery(queryStr, new String[] {});
所以,我明白问题是我在第182行做了一个过早的初始化(我从未读过第182行和第185行之间的变量),但是如果我不这样做,我就不能让代码关闭finally块中的cursor
。
在这种情况下该怎么办?只是忽略这个PMD问题?我是否可以将PMD配置为不会出现这种特定类型的DD异常(并非所有DD异常)? 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
变量会出现异常。
答案 0 :(得分:2)
documentation很容易理解:
使用注释来抑制警告:
// This will suppress UnusedLocalVariable warnings in this class
@SuppressWarnings("PMD.UnusedLocalVariable")
public class Bar {
void bar() {
int foo;
}
}
或您使用评论:
public class Bar {
// 'bar' is accessed by a native method, so we want to suppress warnings for it
private int bar; //NOPMD
}
当涉及到您的特定代码时,我会说最简单的处理方法是不使用finally
块,即使这看起来像是一个完美的地方。