我在java显示中有一个方法,
当我使用C ++时,似乎我可以
display(ListNode L, OutputStream out)
但是,我可以在其中System.out
吗?好像out.write
好不出来。打印出来?
如果我想使用System.out
作为参数,我该怎么办?
答案 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.out
是PrintStream
个实例。 System.out.println
是该实例上的方法调用。
所以,您可以执行以下操作:
public display (ListNode l, PrintStream out) {
out.println("L is " + l);
}