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