Есть ли способ добавить метод в System.out с именем printlnx, который будет префикс выхода со строкой? - PullRequest
0 голосов
/ 22 июня 2011

Есть ли способ добавить в System.out метод с именем printlnx, который бы префиксировал вывод строкой?

Итак, если бы я вызвал:

System.out.printlnx("This is a test");

, чтобы он напечаталчто с префиксом (указанным мной):

-prefix-->This is a test

ПРИМЕЧАНИЕ. Мое намерение состоит в том, чтобы пометить все выходные данные консольной программы, чтобы ее выходные данные отличались от вспомогательной консольной программы, которую я запускаю впоследствии.

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Нет.System.out на самом деле является объектом типа PrintStream.Вы не можете ретроспективно добавлять произвольные методы к определенному объекту.

Но вы очень легко можете написать тот, который живет в вашем собственном пространстве имен:

public final class utils {
    public static void printlnx(String str) {
        System.out.println("-prefix-->" + str);
    }
}

Тогда в другом месте:

...

utils.printlnx("This is a test");
0 голосов
/ 22 июня 2011

Вы не можете добавить метод в существующий класс.По крайней мере, не без значительных усилий, которые в этом случае были бы довольно бессмысленными.У вас есть два варианта.Один из них - иметь свой собственный служебный метод, как описано в другом ответе.

Другой вариант - создать обертку PrintStream вокруг существующего System.out для префикса каждой строки и переназначить его с помощью метода System.setOut ().Вы даже можете поместить туда свой собственный метод, но вам придется разыграть:

((MyPrintStream)System.out).printlnx(...)

Вот полный пример, который я подтвердил для работы:

public class Test {
    public static void main(String argv[]) {
        System.setOut(new MyPrintStream());
        ((MyPrintStream)System.out).printlnx("Hello");
    }

    private static class MyPrintStream extends PrintStream {

        public MyPrintStream() {
            super(System.out);
        }

        public void printlnx(String str) {
           super.println("prefix: " + str);
        }
    }
}
...