Какая польза от PrintWriterPrinter в Android?

Во время исследований в базе данных Android для разработчиков я наткнулся на PrintWriterPrinter (внутри android.util): https://developer.android.com/reference/android/util/PrintWriterPrinter.html

Исходный код класса PrintWriterPrinter показан ниже:

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. Мой вопрос: зачем мне использовать этот бесполезный PrintWriterPrinter, если я могу просто вручную вызвать println для моего объекта PrintWriter вместо создания PrintWriterPrinter, а затем вызвать println для этого (который затем вызывает println для PrintWriter)?

2 ответа

Решение

Ключ implements Printer,

Когда вы изучили программирование на Java, вы узнали об интерфейсах на Java. Класс объявляет, что он реализует интерфейс через implements ключевое слово; PrintWriterPrinter implements Printer указывает на то, что PrintWriterPrinter реализует Printer интерфейс.

Если вы посмотрите на Printer интерфейс в JavaDocs, вы увидите, что он определяет этот единственный println() метод. Однако, если вы посмотрите внимательно, вы увидите, что в JavaDocs перечислены четыре реализации этого интерфейса: LogPrinter, PrintStreamPrinter, PrintWriterPrinter, а также StringBuilderPrinter,

Через то, что известно как полиморфизм, другой код может работать с объектом, известным для реализации Printer интерфейс - вызов println() на этом объекте - не зная или не заботясь о том, какая из этих четырех реализаций находится за этим объектом. Другие разработчики могут создавать еще другие реализации Printer интерфейс (например, тот, который хранит последние 50 строк в ArrayList), а остальная часть фреймворка нуждается в Printer может использовать эту пользовательскую реализацию без проблем.

Возможно, скрыть некоторые методы в PrintWriter для предполагаемого использования, например методы flush/close?

Другие вопросы по тегам