Аномалия DD и очистка ресурсов базы данных :Есть ли чистое решение?

Вот кусок кода, который мы все написали:

    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)

6
задан Simon Brooke 25 May 2012 в 10:20
поделиться