java - 如何使用 intellij 将字段重构为 try-with-resources

标签 java intellij-idea try-with-resources

这个问题与In IntelliJ IDEA, how to surround with try-with-resources?类似但不同的是,我有一个字段而不是局部变量。我的代码如下所示:

    preparedStatement = connect.prepareStatement(sqlQuery);
    preparedStatement.setInt(1, 1);
    preparedStatement.setString(2, "foo");
    preparedStatement.setString(3, "bar");
    preparedStatement.setString(4, "baz");
    preparedStatement.setDouble(5, 0);
    preparedStatement.setDouble(6, 0);
    preparedStatement.setString(7, foovar);
    preparedStatement.setString(8, barvar);
    preparedStatement.executeUpdate();

    preparedStatement = connect.prepareStatement(sqlQuery);
    preparedStatement.setInt(1, 1);
    preparedStatement.setString(2, "foo2");
    preparedStatement.setString(3, "bar2");
    preparedStatement.setString(4, "baz2");
    preparedStatement.setDouble(5, 0);
    preparedStatement.setDouble(6, 0);
    preparedStatement.setString(7, foovar2);
    preparedStatement.setString(8, barvar2);
    preparedStatement.executeUpdate();

我想将其中每一个包装起来,使其看起来像这样::

    try (PreparedStatement preparedStatement = connect.prepareStatement(sqlQuery)) {
        preparedStatement = connect.prepareStatement(sqlQuery);
        preparedStatement.setInt(1, 1);
        preparedStatement.setString(2, "foo");
        preparedStatement.setString(3, "bar");
        preparedStatement.setString(4, "baz");
        preparedStatement.setDouble(5, 0);
        preparedStatement.setDouble(6, 0);
        preparedStatement.setString(7, foovar);
        preparedStatement.setString(8, barvar);
        preparedStatement.executeUpdate();
}

    try (PreparedStatement preparedStatement = connect.prepareStatement(sqlQuery)) {
        preparedStatement = connect.prepareStatement(sqlQuery);
        preparedStatement.setInt(1, 1);
        preparedStatement.setString(2, "foo2");
        preparedStatement.setString(3, "bar2");
        preparedStatement.setString(4, "baz2");
        preparedStatement.setDouble(5, 0);
        preparedStatement.setDouble(6, 0);
        preparedStatement.setString(7, foovar2);
        preparedStatement.setString(8, barvar2);
        preparedStatement.executeUpdate();
}

我真的很想仅使用 IDE 重构快捷方式来做到这一点。这可能吗?在我看来,最具挑战性的部分是将这个字段变成局部变量。一旦我完成了这一点,我想我就能弄清楚剩下的事情了。

最佳答案

我认为这是不可能的,因为这种重构可能会对连接的任何其他用户产生不利影响。

鉴于您的连接处于比方法更高的范围,因此有理由认为此连接实例可能有其他下游用户。考虑到这一点,如果存在其他下游用户的可能性,从他们脚下关闭连接将导致意外或异常行为。

IntelliJ 在此声明其代码分析器无法可靠地保证该变量不被任何其他下游使用者使用。您可能希望将此作为一项功能来请求。

我个人喜欢它允许这种情况发生,因为它可以让开发者免于在他们没有意识到的情况下做一些令人难以置信愚蠢的事情它。

关于java - 如何使用 intellij 将字段重构为 try-with-resources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48652919/

相关文章:

java - 在创建新 Activity 时,为什么我们需要将 EditText 对象转换为 EditText 对象?

typescript - 为什么在 IntelliJ 中自动导入 Typescript 类时路径错误

java - IntelliJ Spring Gradle 项目注释不起作用

intellij-idea - IntelliJ 'maven-site-plugin' 报告插件显示错误,甚至还没有做任何事情

Java 使用带有 try-with-resources 的扫描器

java - 如何选择过去一个月的第一个星期一之前的星期日

java - 使用 Ant 构建 Struts 应用程序时出错

java - try-with-resources 语句的目的是什么?

java - Guava :值或空集的不可变集

java - 如何在 Java 中关闭隐式流?