Android中的PrintWriterPrinter有什么用?

What is the use of PrintWriterPrinter in Android?

在 Android 的开发者数据库中进行研究时,我偶然发现了 PrintWriterPrinter(在 android.util 中): https://developer.android.com/reference/android/util/PrintWriterPrinter.html

PrintWriterPrinterclass的源代码如下所示:

package android.util;

import java.io.PrintWriter;

/**
 * Implementation of a {@link android.util.Printer} that sends its output
 * to a {@link java.io.PrintWriter}.
 */
public class PrintWriterPrinter implements Printer {
    private final PrintWriter mPW;

    /**
     * Create a new Printer that sends to a PrintWriter object.
     * 
     * @param pw The PrintWriter where you would like output to go.
     */
    public PrintWriterPrinter(PrintWriter pw) {
        mPW = pw;
    }

    public void println(String x) {
        mPW.println(x);
    }
}

如您所见,它只有一个方法:println(String x),它本质上是将 println 应用于传递的 PrintWriter。 我的问题:如果我可以在我的 PrintWriter 对象上手动调用 println 而不是创建 PrintWriterPrinter 然后调用 println,我为什么要使用这个无用的 PrintWriterPrinter在那上面(然后在 PrintWriter 上调用 println)?

关键是implements Printer.

当您学习 Java 编程时,您就了解了 Java interfaces。一个class通过implements关键字声明它实现了一个接口; PrintWriterPrinter implements Printer表示PrintWriterPrinter实现了Printer接口。

如果您查看 Java 文档中的 Printer 接口,您会发现它定义了唯一的 println() 方法。但是,如果仔细查看,您会发现 JavaDocs 列出了该接口的四个实现:LogPrinterPrintStreamPrinterPrintWriterPrinterStringBuilderPrinter

通过所谓的 polymorphism,其他代码可以与已知实现 Printer 接口的对象一起工作——在该对象上调用 println()——而无需知道或关心哪个对象这四个实现位于该对象的后面。其他开发人员可以创建 Printer 接口的其他实现(例如,将最后 50 行存储在 ArrayList 中),框架的其余部分需要 Printer 可以使用它自定义实现没有问题。

可能会在 PrintWriter 上隐藏某些方法以用于预期用途,例如 flush/close 方法?