这里有一个代码,我们都写了:
public CustomerTO getCustomerByCustDel(final String cust, final int del) throws SQLException { final PreparedStatement query = getFetchByCustDel(); ResultSet records = null; try { query.setString(1, cust); query.setInt(2, del); records = query.executeQuery(); return this.getCustomer(records); } finally { if (records != null) { records.close(); } query.close(); } }
如果您忽略了最后的块块, 那么您就会留下数据库资源, 这显然是一个潜在的问题。 但是, 如果您做我在这里做的事 - 将结果部分设置为在 ** try** 块外的无效, 然后将其设定到块内所需的值 - PMD 报告DDD异常点。 在文档中, DD异常点描述如下:
DataflowAnomalyAnalysis: The dataflow analysis tracks local definitions, undefinitions and references to variables on different paths on the data flow.From those informations there can be found various problems. [...] DD - Anomaly: A recently defined variable is redefined. This is ominous but don t have to be a bug.
如果您在不设定值的情况下在块外声明结果共享, 当您做 < i> if (records! = null) i > 测试时, 正确的获得一个变量可能不是初始错误 。
在我看来,我在这里的用法并不是一个错误。但是,有没有一种清洁的改写方式不会触发PMD警告?我不想特别想禁用PMD S DataFlowAnomalyAnavication 规则,因为识别UR和DU异常实际上是有益的;但是,这些DD异常让我怀疑我可以做更好的事情――如果没有更好的方法,它们就等于是混乱(我也许应该看看我是否可以改写PMD规则)