[英]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.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);
}
}
當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.