Я пытаюсь исправить некоторые проблемы, обнаруженные Sonarqube, и у меня есть несколько, которые по сути совпадают с примером, показанным здесь.Это говорит мне, что я должен закрыть объект, но я не могу этого сделать, если объект - это то, что метод возвращает вызывающей стороне, могу ли я?
package my.qe.codereview.myservice.data;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.stereotype.Component;
import my.qe.review.integration.to.StatusHistoryInsertRequest;
@Component
public class InsertStatusHistoryPSCBuilder {
@Autowired
private Properties queryProps;
public PreparedStatementCreator build(final StatusHistoryInsertRequest request) {
return new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement pst = con.prepareStatement(queryProps.getProperty("insertStatusHistory"));
pst.setObject(1, request.getReviewStatusHistoryId());
pst.setObject(2, request.getReviewHistoryId());
return pst;
}
};
}
}
Я погуглил вопрос и какПримеры исправления Я мог найти все вовлеченные объекты, которые существуют только в рамках рассматриваемого метода.Никто не обращался к ситуации, когда объект возвращается методом, как здесь.У меня нет контроля над тем, что делает вызывающая сторона с объектом после того, как я вернусь.
Что я могу сделать, чтобы решить эту проблему?Я предполагаю, что вы не можете закрыть объект и все равно вернуть его (это правильно?).Или реальная проблема заключается в том, что метод включает в себя вызов другого метода, который может вызвать исключение, и мне нужно перехватывать, закрывать и перебрасывать?
Обновление: использование try-with-resources для создания объекта Closeableне сработало, так как объект все еще закрывается под крышками до возврата метода, что приводит к тому, что вызывающая сторона выдает исключение, потому что возвращаемый объект был закрыт (что отвечает на вопрос в предыдущем абзаце).В настоящее время я не знаю способа вернуть объект Closeable, если Sonarqube не пометит его как блокировщик.
Было предложено пометить его как ложноположительный.Я не уверен, если это вариант в моей рабочей среде.