2

为什么public void printStackTrace(PrintStream s)Throwable类中采用 PrintWriter 而不是 Writer?

我认为 Writer 应该是规范(接口的代码,而不是特定的实现),但它可能是我缺少的东西,因此这个问题。

4

2 回答 2

1

可能有几个原因

  • 最初的实现是使用 PrintStream,其改进版本是 PrintWriter。
  • 该方法打印文本行,虽然它可以按需创建 PrintWriter,但这并不理想。

他们本可以做的是接受一个 Appendable,它是 Writer 的父级。

public void printStackTrace(Appendable appendable) {
    PrintWriter pw = (appendable instanceof PrintWriter) ? (PrintWriter) appendable :
        (appendable instanceof Writer) ? new PrintWriter((Writer) appendable) :
        new printWriter(new AppendableWriter(appendable));
于 2012-09-14T07:24:01.900 回答
1

Writer是一个PrintWriter扩展的抽象类。Throwable.printStackTrace需要 aPrintWriter因为它调用了类println中不可用的方法Writerprintln被调用是因为它需要打印堆栈跟踪,每行一个堆栈帧。

于 2012-09-14T07:25:32.617 回答