[英]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.