繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM