【问题标题】:Can Intellij / Android Studio merge multiple catch blocks into one?Intellij / Android Studio 可以将多个 catch 块合并为一个吗?
【发布时间】:2016-09-06 07:58:17
【问题描述】:
我必须重构这样的东西:
class BarException extends FooException
class BazException extends FooException
try {
// Some risky stuff
} catch (BarException e) {
debug(e);
} catch (BazException e) {
debug(e);
}
Intellij 或 Android Studio 是否能够将 catch 块重写为:
} catch (FooException e) {
debug(e);
}
【问题讨论】:
标签:
java
android-studio
inheritance
intellij-idea
exception-handling
【解决方案1】:
IDEA 能做的最好的就是自动创建
} catch (BarException | BazException e) {
debug(e);
}
为此,您可以运行检查“'try' 语句中的相同'catch' 分支”
(例如菜单分析 -> 按名称运行检查)。
将其更改为“FooException”会更改语义,因为无法自动证明没有其他 FooException 子类(毕竟 Java 可以动态加载新类)。
当然,你自己可能也知道,所以重构是有道理的。
【解决方案2】:
在添加一组try catch之前,你可以这样做
- 突出显示“
//Some risky stuff”
- 代码 -> 环绕... -> try/catch
【解决方案3】:
至少在 IntelliJ Utimate 2018.2 中,运行检查 Identical 'catch' branches in 'try' statement(以“按名称运行检查”开始)后,您可以点击 Collapse 'catch' blocks 按钮自动合并 catch 语句