Вот кусок кода, который мы все написали:
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(); } }
Если вы опустите блок 'finally', вы оставите ресурсы базы данных подвешенными, что, очевидно, является потенциальной проблемой. Однако, если вы сделаете то, что я сделал здесь -, установите для ResultSet значение null за пределами блока **try **, а затем установите его в желаемое значение внутри блока -, PMD сообщит об аномалии «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.
Если вы объявите ResultSet вне блока без установки значения, вы справедливо получите ошибку «переменная, возможно, не была инициализирована» при выполнении записи if (!= null)контрольная работа.
Теперь, на мой взгляд, мое использование здесь не является ошибкой. Но есть ли способ чистой перезаписи, которая не вызывала бы предупреждения PMD? Я не особенно хочу отключать правило DataFlowAnomalyAnalysis PMD, поскольку выявление аномалий UR и DU было бы действительно полезно; но эти аномалии DD заставляют меня подозревать, что я мог бы сделать что-то лучше -, и, если нет лучшего способа сделать это, они составляют беспорядок (, и мне, возможно, следует подумать, могу ли я переписать правило PMD)