2

ThrowableクラスでWriterではなくPrintWriterを使用するのはpublic void printStackTrace(PrintStream s)なぜですか?

Writerは標準(特定の実装ではなく、インターフェイスへのコード)である必要があると思いますが、それは私が見逃しているものである可能性があるため、この質問です。

4

2 に答える 2

1

いくつかの理由が考えられます

  • 元々の実装はPrintStreamを使用することでしたが、その改良版はPrintWriterです。
  • このメソッドはテキストの行を印刷します。オンデマンドでPrintWriterを作成することはできますが、これは理想的ではありません。

彼らができたのは、このようにWriterの親であるAppendableを受け入れることです。

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

WriterPrintWriter拡張する抽象クラスです。クラスで使用できないメソッドを呼び出すため、Throwable.printStackTraceを取ります。1行に1スタックフレームのスタックトレースを出力する必要があるため、が呼び出されます。PrintWriterprintlnWriterprintln

于 2012-09-14T07:25:32.617 に答える