簡體   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