簡體   English   中英

如何在Java方法中使用System.out作為參數

[英]How to use System.out as an argument in method in java

我在Java顯示中有一個方法,

當我使用C ++時,似乎可以display(ListNode L, OutputStream out)但是我可以在其中display(ListNode L, OutputStream out) System.out嗎? 似乎out.write可以不可以out.println嗎?

如果我想使用System.out作為參數怎么辦?

由於成員System.outPrintStream類的,因此您可以執行以下操作:

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);
    }
}

System.out隨處可見時,為什么要傳遞System.out作為參數?

為什么不這樣做:

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

System.out的類型是PrintStream。 是javadoc。

在Java 8中,人們可能還會想到方法引用。

例:

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

...

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

System.out是一個PrintStream實例。 System.out.println是對該實例的方法調用。 因此,您可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM