有没有办法向System.out添加一个名为printlnx的方法,该方法将输出作为字符串前缀?

时间:2011-06-21 23:46:17

标签: java console-application static-methods

有没有办法向System.out添加一个名为printlnx的方法,该方法会在输出前加一个字符串?

所以,如果我打电话:

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

它会用前缀(由我指定)打印出来:

-prefix-->This is a test

注意:我的目的是标记控制台程序的所有输出,使其输出与我之后运行的辅助控制台程序不同。

2 个答案:

答案 0 :(得分:2)

没有。 System.out实际上是PrintStream类型的对象。您不能追溯性地将任意方法添加到特定对象。

但是你可以很容易地编写一个存在于你自己的命名空间中的文件:

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

然后在其他地方:

...

utils.printlnx("This is a test");

答案 1 :(得分:0)

您无法向现有类添加方法。至少在没有重大努力的情况下,在这种情况下这将是毫无意义的。你有两个选择。一种是拥有自己的实用方法,如其他答案中所述。

其他选项是在现有System.out周围创建一个包装器PrintStream,为每一行添加前缀,并通过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);
        }
    }
}