[英]replacing system.out.println(class) in java
我有一些包含toString函数的类,它们可以很好地工作:
剪下声明:
public String toString() {
return "Port info: "+myPort.variable;
}
剪切了main():
Port myPort;
myPort.fillInfo();
system.out.println(myPort);
输出:
"Port info: 123"
我正在尝试使用MyWindow包含的myWindow.println(myPort)调用替换所有的system.out.println(myPort)调用:
public void println(String toPrint)
{
textArea.append(toPrint+"\n"); //or insert
}
但是,我得到了:
The method println(String) in the type window is not applicable for the arguments (Port)
换句话说,我的声明期待String类型,我试图将它传递给Port类型。
不知何故,system.out.println()将获取任何声明了toString()的类。
system.out.println如何获取任何类并将其打印出来,并运行其toString()方法(如果存在)? 而且,更重要的是,我如何为我自己的println()函数复制此功能?
将Window
更改为
public void println(Object obj)
{
textArea.append(obj +"\n");
}
PrintStream.println
有一个带有Object
参数的重载。 你可以让你的println
做同样的事情。
首先,请不要使用\\n
作为行分隔符(它不可移植)。 除了重载println(Object)
,您还可以使方法具有通用性。 就像是
public <T> void println(T obj)
{
textArea.append(String.format("%s%n", obj));
}
要么
public void println(Object obj)
{
textArea.append(String.format("%s%n", obj));
}
要么
public void println(Object obj)
{
textArea.append((obj == null ? "null" : obj.toString())
+ System.lineSeparator());
}
问题是System.out有一个方法来打印控制对象,因为它包含所有原始数据类型。 关于这一点的是,因为所有方法都具有相同的名称,只是更改要打印的参数的数据类型,您认为可以通过字符串传递对象而不是。 方法.println()自动获取传递对象的方法。 在此方法.println()中,他获取您通过参数指示的对象并调用其方法.toString()以获取对象的字符串表示形式并打印在控制台上。
如果要打印任何类型的对象,必须将参数声明为对象类型,并从对象调用方法.toString()并打印该信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.