我有一些包含toString函数的类,它们可以很好地工作:
宣称:
public String toString() {
return "Port info: "+myPort.variable;
}
剪断了main():
Port myPort;
myPort.fillInfo();
system.out.println(myPort);
输出:
"Port info: 123"
我试图用myWindow.println(myPort)调用myWindow包含的所有系统替换所有的.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()函数复制这个功能?
答案 0 :(得分:3)
将Window
更改为
public void println(Object obj)
{
textArea.append(obj +"\n");
}
答案 1 :(得分:2)
PrintStream.println
has an overload that takes an Object
argument.您可以让println
做同样的事。
答案 2 :(得分:2)
首先,请不要将\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());
}
答案 3 :(得分:0)
问题是System.out有一个方法来打印控制对象,因为它包含所有原始数据类型。关于这一点的是,因为所有方法都具有相同的名称,只是更改要打印的参数的数据类型,您认为可以通过字符串传递对象而不是。方法.println()自动获取传递对象的方法。在此方法.println()中,他获取您通过参数指示的对象并调用其方法.toString()以获取对象的字符串表示形式并打印在控制台上。
如果要打印任何类型的对象,必须将参数声明为对象类型,并从对象调用方法.toString()并打印该信息。