【发布时间】:2015-04-03 20:57:03
【问题描述】:
我经常遇到同样的问题。在我的 Java 应用程序的核心,我有一些方法会引发任何方法调用者都无法处理的异常。我必须将这些异常冒泡到 main 方法。所有这些异常总结,所以我在我的应用程序的更高级别上有许多 throws 语句。
例如我的应用程序的核心有一个 NodeJsManager.java 类:
public class NodeJsManager {
public static void startNodeJs() throws ExecuteException {
// Code to start NodeJs Server goes here
}
}
要启动 NodeJs 服务器,我必须在命令行上执行一些操作。我可以用 apache 类 org.apache.commons.exec.CommandLine 做到这一点。但如果执行以错误代码退出,则会引发 ExecuteException。如果没有启动 NodeJ,我的应用程序将毫无用处。没有任何方法可以捕获此异常,这只是我的应用程序工作的要求。所以这个异常几乎会在整个应用程序生命周期中冒泡。我有其他执行相同操作的管理器(如果配置路径错误,则 ConfigurationManager 会引发异常)。总之,它在更高级别的每个方法中总结了许多 throws 语句,我什至不记得该异常的原因。
你会如何处理这个问题?我必须做一些完全错误的事情,因为我找不到描述我的问题的类似帖子!
问候 迈克
更新
我刚刚发现了我的旧 Effective Java 书。作者(Google 的一名 Java 架构师)写了以下关于异常的文章:
...对可恢复条件和运行时使用检查异常 编程错误例外。
...
如果不清楚是否可以恢复,最好使用未经检查的异常...
在我的情况下,它显然是不可恢复的,所以抛出运行时异常是要走的路。我一直认为应该防止运行时异常,这改变了我对 Java 异常的看法。
【问题讨论】: