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 列出了该接口的四个实现:LogPrinter
、PrintStreamPrinter
、PrintWriterPrinter
和 StringBuilderPrinter
。
通过所谓的 polymorphism,其他代码可以与已知实现 Printer
接口的对象一起工作——在该对象上调用 println()
——而无需知道或关心哪个对象这四个实现位于该对象的后面。其他开发人员可以创建 Printer
接口的其他实现(例如,将最后 50 行存储在 ArrayList
中),框架的其余部分需要 Printer
可以使用它自定义实现没有问题。
可能会在 PrintWriter 上隐藏某些方法以用于预期用途,例如 flush/close 方法?
在 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 列出了该接口的四个实现:LogPrinter
、PrintStreamPrinter
、PrintWriterPrinter
和 StringBuilderPrinter
。
通过所谓的 polymorphism,其他代码可以与已知实现 Printer
接口的对象一起工作——在该对象上调用 println()
——而无需知道或关心哪个对象这四个实现位于该对象的后面。其他开发人员可以创建 Printer
接口的其他实现(例如,将最后 50 行存储在 ArrayList
中),框架的其余部分需要 Printer
可以使用它自定义实现没有问题。
可能会在 PrintWriter 上隐藏某些方法以用于预期用途,例如 flush/close 方法?