try-finally with close auto-refactoring to try-with-resources with codestyle/checkstyle
try-finally with close auto-refactoring to try-with-resources with codestyle/checkstyle
我正在开发最近从 Java 6 迁移到 Java 7 的代码库。我想替换这样的结构:
Connection conn = null;
try{
conn = new Connection();
...
} catch(Exception ex){
...
} finally{
if (conn != null){
conn.close();
}
}
与 try-with-resources
(从 Java 1.7 开始可用):
try(Connection conn = new Connection()){
...
} catch(Exception ex){
...
}
是否有自动将旧的重构为新的方法(可能使用 Checkstyle 插件,或者在 Eclipse 本身中)?
很难快速改变这一切。请注意,有时 finally
中还有另一个 try-catch
块,它捕获关闭资源时抛出的异常。
try-with-resources
语句允许您处理资源关闭异常(在 close
方法中抛出的异常将被抑制)。
我还没有听说过这样的 Eclipse
功能,但是如果您可能想使用 IntelliJ IDEA Community Edition
IDE 只是为了这个目的。
#1
您可以使用名为:
的代码检查功能
'try finally' replaceable with 'try' with resources
。
AutoCloseable used without 'try' with resources
你只需要按Ctrl+Alt+Shift,输入检查名称并点击输入。之后您将看到 IDEA 可以应用此模式的地方,但请注意它并未涵盖 100% 的情况。
#2
另一种方法,更困难,但可高度自定义的是 Structural Search and Replace
功能。您可以定义要更改的结构:
try {
$type$ $objectName$ = new $concreteType$($args$)
$tryStatements$;
} catch($exceptionType$ $exceptionName$) {
$catchStatements$;
} finally {
$finallyStatements$;
}
最终结构:
try ($type$ $objectName$ = new $concreteType$($args$)) {
$tryStatements$;
} catch($exceptionType$ $exceptionName$) {
$catchStatements$;
}
在变量设置中,您可以要求 $concreteType$
实现 AutoCloseable
接口。
但请注意:
- 这里去掉了
finally
块,支持单个catch
块。
- 还假设每个
try-with-resources
块将打开一个资源。
- 如前所述 -
finally
块中没有异常处理。
这个模板当然需要更多的工作,而且这样做可能不值得。
我正在开发最近从 Java 6 迁移到 Java 7 的代码库。我想替换这样的结构:
Connection conn = null;
try{
conn = new Connection();
...
} catch(Exception ex){
...
} finally{
if (conn != null){
conn.close();
}
}
与 try-with-resources
(从 Java 1.7 开始可用):
try(Connection conn = new Connection()){
...
} catch(Exception ex){
...
}
是否有自动将旧的重构为新的方法(可能使用 Checkstyle 插件,或者在 Eclipse 本身中)?
很难快速改变这一切。请注意,有时 finally
中还有另一个 try-catch
块,它捕获关闭资源时抛出的异常。
try-with-resources
语句允许您处理资源关闭异常(在 close
方法中抛出的异常将被抑制)。
我还没有听说过这样的 Eclipse
功能,但是如果您可能想使用 IntelliJ IDEA Community Edition
IDE 只是为了这个目的。
#1
您可以使用名为:
的代码检查功能'try finally' replaceable with 'try' with resources
。AutoCloseable used without 'try' with resources
你只需要按Ctrl+Alt+Shift,输入检查名称并点击输入。之后您将看到 IDEA 可以应用此模式的地方,但请注意它并未涵盖 100% 的情况。
#2
另一种方法,更困难,但可高度自定义的是 Structural Search and Replace
功能。您可以定义要更改的结构:
try {
$type$ $objectName$ = new $concreteType$($args$)
$tryStatements$;
} catch($exceptionType$ $exceptionName$) {
$catchStatements$;
} finally {
$finallyStatements$;
}
最终结构:
try ($type$ $objectName$ = new $concreteType$($args$)) {
$tryStatements$;
} catch($exceptionType$ $exceptionName$) {
$catchStatements$;
}
在变量设置中,您可以要求 $concreteType$
实现 AutoCloseable
接口。
但请注意:
- 这里去掉了
finally
块,支持单个catch
块。 - 还假设每个
try-with-resources
块将打开一个资源。 - 如前所述 -
finally
块中没有异常处理。
这个模板当然需要更多的工作,而且这样做可能不值得。