如何使用System.out作为java中方法的参数

时间:2014-04-02 06:44:24

标签: java

我在java显示中有一个方法,

当我使用C ++时,似乎我可以 display(ListNode L, OutputStream out)但是,我可以在其中System.out吗?好像out.write好不出来。打印出来?

如果我想使用System.out作为参数,我该怎么办?

5 个答案:

答案 0 :(得分:4)

由于成员System.out属于班级PrintStream,您可以这样做:

void display(PrintStream out) {
    out.println("42!");
}

为了更好地可视化层次结构:

Object
  |---OutputStream
  |     |---FileOutputStream
  |     |---FilterOutputStream
  |           |---PrintStream (System.out)
  |
  |---InputStream (System.in)
  |     |---FileInputStream

要解决实际问题,请考虑使用具有两个实现它的类的接口。

例如(无异常处理):

interface Display {
    void display(String message);
}

class ConsoleDisplay implements Display {
    void display(String message) {
        System.out.println(message);
    }
}

class FileDisplay implements Display {
    FileOutputStream out;

    FileDisplay(String filename) {
        out = new FileOutputStream(filename);
    }

    void display(String message) {
        out.write(message.getBytes());
    }
}

class DoingStuff {
    public static void main(String[] args) {
        Display dispFile = new FileDisplay("logfile.log");
        display("42!", dispFile);

        Display dispConsole = new ConsoleDisplay();
        display("42!", dispConsole);
    }

    static void display(String message, Display disp) {
        disp.display(message);
    }
}

答案 1 :(得分:3)

为什么要将System.out作为参数传递给所有人?

为什么不这样做:

public void display(final String toDisplay) {
    System.out.println(toDisplay);
}

答案 2 :(得分:2)

System.out的类型是PrintStream。 Here是javadoc。

答案 3 :(得分:1)

在Java 8中,人们可能会想到方法引用。

示例:

private List<ListNode> nodes = new LinkedList<>();

...

nodes.forEarch(System.out :: println);

答案 4 :(得分:0)

System.outPrintStream个实例。 System.out.println是该实例上的方法调用。 所以,您可以执行以下操作:

public display (ListNode l, PrintStream out) {
    out.println("L is " + l);
}