【发布时间】:2012-02-29 00:56:29
【问题描述】:
我曾尝试在其他线程上寻找答案,但到目前为止,我只看到线程表明捕获 Throwable 是不好的。我的问题是,你有没有理由想要这样做,然后在 catch 块中什么都不做,除了打印堆栈跟踪?
我最近被带入一个项目,任务是清理 RESTful 服务的现有类集的错误处理。一些辅助服务类具有仅捕获 Throwable 并打印出堆栈跟踪的 try/catch 块,如下所示:
class MainService {
SubService1 s1;
SubService2 s2;
public doMainService() {
}
}
class SubService1 {
public int findSomething() {
try {
// Do Something
} catch (Throwable t) {
t.printStackTrace();
}
}
}
class SubService2 {
public int findSomethingElse() {
try {
// Do Something
} catch (Throwable t) {
t.printStackTrace();
}
}
}
有没有可以接受的情况?抛出 Exception 而没有 try/catch 块的方法会更好吗?
【问题讨论】:
-
没有 ESP 和写它的人的直接链接......这个问题没有一个答案。最可能的答案?糟糕或懒惰的程序员。其他可能性?从未退出调试阶段的未完成/匆忙的代码。
-
这是一个有效的问题,尤其是对于刚接触 Java 的人。他/她在问我们这些 Java 专家,这样做是否有充分的理由。
-
对不起,我想我应该问这个问题更好一点,因为不可能知道以前的程序员的想法。代码运行良好,代码中有 ExceptionMappers 将异常映射到 HTTP 状态代码,这让我更加困惑。
-
"
throws Exception" 通常也是个坏主意,顺便说一句。 -
我提到泛型 Exception 类的原因是由于 try/catch throw Exception 中的一些代码(这些是对我无法控制的代码的调用)。其他是更具体的异常,例如 ParseException 和 IOException。