【发布时间】:2010-11-30 13:43:33
【问题描述】:
可能重复:why-is-java-lang-throwable-a-class
嗨!我不明白为什么 Throwable 不是抽象类。我只看到一个用例:在日志系统中找出调用层次结构。但它可以是这个或其他类的一些静态方法。那么,为什么?)
谢谢。
更新
来自 java.util.logging.LogRecord
// Get the stack trace.
StackTraceElement stack[] = (new Throwable()).getStackTrace();
为什么它不能是 Throwable.getStackTrace(); 或 java.lang.Thread 中的
(new Exception()).getStackTrace();
这样我们就可以避开throw new Throwable();
更新2 来自 javadoc
Throwable 类是超类 中的所有错误和异常 Java 语言。
所以,作为一个超类,它应该是抽象的,恕我直言。根据这个定义,使用它来获取堆栈跟踪并不是很好的情况。
【问题讨论】:
-
它在哪里“抛出新的 Throwable();” ?不确定您是否需要避免永远不会发生的事情。 ;)
-
@Peter Lawrey:有人可以写。 API 应该避免使用不当(不仅是我的恕我直言)。
-
@Stas,极不可能意外编译,因为它是检查异常。您必须处理它或将其添加到 throws 子句中。我认为这已经足够回避了。不相信存在需要其他解决方案的严重问题。
-
@Stas,我的IDE也有一个警告“Prohibited Exception throw”这个可以改成编译器错误级别。
标签: java class-design throwable