在java中替换system.out.println(class)

时间:2016-02-12 01:43:11

标签: java

我有一些包含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()函数复制这个功能?

4 个答案:

答案 0 :(得分:3)

Window更改为

public void println(Object obj)
{
    textArea.append(obj +"\n"); 
}

答案 1 :(得分:2)

答案 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()并打印该信息。