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

时间:2018-02-06 22:19:45

标签: 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重构快捷方式来实现这一点。这可能吗?在我看来,最具挑战性的部分是将这个领域变成一个局部变量。一旦我做完了,我想我可以弄清楚剩下的。

1 个答案:

答案 0 :(得分:3)

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

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

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

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