gpt4 book ai didi

java - try-finally with close auto-refactoring 到 try-with-resources with codestyle/checkstyle

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:35 26 4
gpt4 key购买 nike

我正在处理最近从 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 block ,它捕获关闭资源时抛出的异常。

try-with-resources 语句允许您处理资源关闭异常(在 close 方法中抛出的异常将被抑制)。

我还没有听说过这样的 Eclipse 功能,但是如果您可能只想使用 IntelliJ IDEA Community Edition IDE 来达到这个目的。

#1

您可以使用以下代码检查功能:

  1. 'try finally' 可替换为 'try' with resources
  2. AutoCloseable 在没有 'try' 的情况下使用资源

您只需按 Ctrl+Alt+Shift,输入检查名称并按 Enter。之后你会看到 IDEA 可以应用这种模式的地方,但要注意它并没有涵盖 100% 的情况。

#2

另一种方法更难,但可高度自定义的是结构搜索和替换 功能。您可以定义要更改的结构:

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 接口(interface)。

但请注意:

  1. 我在这里摆脱了 finally block 并支持单个 catch block 。
  2. 还假设每个 try-with-resources block 将打开单个资源。
  3. 如前所述 - finally block 中没有异常处理。

这个模板当然需要更多的工作,而且这样做可能不值得。

关于java - try-finally with close auto-refactoring 到 try-with-resources with codestyle/checkstyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com