我如何使用 intellij 将字段重构为 try-with-resources
How can I use intellij to refactor a field into a 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 在此声明其代码分析器无法可靠地保证此变量未被任何其他下游使用者使用。您可能希望将此作为一项功能来请求。
我个人喜欢不允许允许这种情况发生,因为它可以避免开发人员做一些不可思议的事情愚蠢到不知不觉
这个问题与
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 在此声明其代码分析器无法可靠地保证此变量未被任何其他下游使用者使用。您可能希望将此作为一项功能来请求。
我个人喜欢不允许允许这种情况发生,因为它可以避免开发人员做一些不可思议的事情愚蠢到不知不觉