为什么Throwable.printStackTrace采用PrintWriter而不是Writer?

时间:2012-09-14 07:16:24

标签: java printstacktrace

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

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:1)

WriterPrintWriter扩展的抽象类。 Throwable.printStackTrace需要PrintWriter,因为它会在println类上调用Writer方法。println类中没有这个方法。{{1}}被调用,因为它需要打印堆栈跟踪,每行一个堆栈帧。