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

如何在java中使用System.out作为方法中的参数,java,Java,我有一个java显示的方法 当我使用C++时,我似乎可以 display(listnodel,OutputStream out)但是,我可以在其中输出System.out?好像输出了。写入可以吗 如果我想使用System.out作为参数,我应该怎么做?由于该成员属于同一级别,您可以执行以下操作: void display(PrintStream out) { out.println("42!"); } 为了更好地显示层次结构,请执行以下操作: Object |---OutputSt

我有一个java显示的方法

当我使用C++时,我似乎可以
display(listnodel,OutputStream out)
但是,我可以在其中输出
System.out
?好像
输出了。写入
可以吗

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

由于该成员属于同一级别,您可以执行以下操作:

void display(PrintStream out) {
    out.println("42!");
}
为了更好地显示层次结构,请执行以下操作:

Object
  |---OutputStream
  |     |---FileOutputStream
  |     |---FilterOutputStream
  |           |---PrintStream (System.out)
  |
  |---InputStream (System.in)
  |     |---FileInputStream
要解决实际问题,请考虑使用一个包含两个类的接口来实现它

例如(无异常处理):

由于该成员属于同一级别,您可以执行以下操作:

void display(PrintStream out) {
    out.println("42!");
}
为了更好地显示层次结构,请执行以下操作:

Object
  |---OutputStream
  |     |---FileOutputStream
  |     |---FilterOutputStream
  |           |---PrintStream (System.out)
  |
  |---InputStream (System.in)
  |     |---FileInputStream
要解决实际问题,请考虑使用一个包含两个类的接口来实现它

例如(无异常处理):


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

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

系统。out
是一个
PrintStream
实例
System.out.println
是对该实例的方法调用。 因此,您可以执行以下操作:

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

System.out
是一个
PrintStream
实例
System.out.println
是对该实例的方法调用。 因此,您可以执行以下操作:

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

如果
System.out
在任何地方都可用,为什么要将其作为参数传递

为什么不这样做:

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

如果
System.out
在任何地方都可用,为什么要将其作为参数传递

为什么不这样做:

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

在Java8中,人们可能也会想到方法引用

例如:

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

...

nodes.forEarch(System.out :: println);
private List nodes=new LinkedList();
...
nodes.forEarch(System.out::println);

在Java8中,人们可能还会想到方法引用

例如:

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

...

nodes.forEarch(System.out :: println);
private List nodes=new LinkedList();
...
nodes.forEarch(System.out::println);

谢谢,有没有比PrintStream更大的流家族,比如说甚至包含fileinputStream?没有!您必须区分输入流和输出流
PrintStream
是一个
OutputStream
FileInputStream
是一个
InputStream
。因此,这两者之间不存在相等的超类
FileOutputStream
PrintStream
来自同一个超类
OutputStream
。像
System.in
FileInputStream
都来自同一个超类
InputStream
。谢谢,但是如果我把OutputStream out参数放出来,那么out.write就没有println了,对吗?这意味着我不能把outputStream作为参数,然后把PrintStream放在那个里,对吗?没错!但是您可以像
if(out instanceof PrintStream){((PrintStream)out).println(“42!”);}
那样进行操作。但这是一个错误的方向。你应该解释一下,你真正想做什么。您可能希望实现两个新类,如
ConsoleDisplay
FileDisplay
(或更多创造性名称),以及一个带有方法
Display
的接口,如
Display
。考虑谢谢,有没有比PrintStream更大的流家族,比如说甚至包含fileinputStream?没有!您必须区分输入流和输出流
PrintStream
是一个
OutputStream
FileInputStream
是一个
InputStream
。因此,这两者之间不存在相等的超类
FileOutputStream
PrintStream
来自同一个超类
OutputStream
。像
System.in
FileInputStream
都来自同一个超类
InputStream
。谢谢,但是如果我把OutputStream out参数放出来,那么out.write就没有println了,对吗?这意味着我不能把outputStream作为参数,然后把PrintStream放在那个里,对吗?没错!但是您可以像
if(out instanceof PrintStream){((PrintStream)out).println(“42!”);}
那样进行操作。但这是一个错误的方向。你应该解释一下,你真正想做什么。您可能希望实现两个新类,如
ConsoleDisplay
FileDisplay
(或更多创造性名称),以及一个带有方法
Display
的接口,如
Display
。考虑