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

在java中替换system.out.println(类),java,Java,我有一些类,包括toString函数,这些函数工作得非常好: 声明摘要: public String toString() { return "Port info: "+myPort.variable; } 主管道的断开() 输出: "Port info: 123" 我正在尝试用myWindow.println(myPort)调用替换所有system.out.println(myPort)调用,其中myWindow包含: public void println(Str

我有一些类,包括toString函数,这些函数工作得非常好:

声明摘要:

public String toString() {
        return "Port info: "+myPort.variable;
    }
主管道的断开()

输出:

"Port info: 123"
我正在尝试用myWindow.println(myPort)调用替换所有system.out.println(myPort)调用,其中myWindow包含:

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)
换句话说,我的声明需要字符串类型,我正试图将端口类型传递给它

不知何故,system.out.println()将接受任何声明了toString()的类


system.out.println如何获取任何类并将其打印出来,如果存在,如何运行其toString()方法?而且,更重要的是,我如何为我自己的println()函数复制此功能?

您可以让您的
println
也这样做。

窗口更改为

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

首先,请不要使用
\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(),然后打印该信息

您可以直接将
System.out
重定向到
JTextArea
(无需替换语句`),类似于
obj.toString()
的内容不是空安全的(
String.valueOf(obj)
is)。但是无论如何,
%s
格式说明符可以处理任何对象,所以只需使用
String.format(“%s%n”,obj)
@ChrisJester-Young谢谢。为
%n
编辑了.plus 1-这是什么版本的?@ScaryWombat 1.5+(我想)。
public void println(Object obj)
{
    textArea.append((obj == null ? "null" : obj.toString()) 
            + System.lineSeparator()); 
}