簡體   English   中英

為什么普遍的做法是重寫java中的toString()方法來打印class的實例變量?

[英]Why is it common practice to override the method toString() in java to print the instance variables of the class?

正如我一直在學習的那樣,甚至一些 IDE 都將它嵌入其中,以覆蓋toString()方法以打印出 class 的所有實例變量。

object.java中定義的原始toString()定義如下:

public String toString() {
  return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

通常的做法是將其覆蓋為:

public String toString() {
  return "className{" +"var1="+var1+", var2="+var2+'}';
}

為什么我們不保留toString()方法的原始功能並創建一個具有此功能的新方法(使用不同的名稱)?

我們可以。 但是,對於使用 myNewToString 方法對您的子類一無所知的其他類,如何知道如何以簡潔但信息豐富的方式打印文本表示任意子類的字符串

toString 方法旨在被重寫以執行此操作。 是的,它確實有默認行為,但不是很有用。 它的作者希望你覆蓋它。 覆蓋它以返回常用的內容更有用,但您不必這樣做。 EmailAddress class 的 toString 方法可以返回

public String toString() {
    return "EmailAddress{localPart = " + localPart + ", domainName = " + domainName + "}";
}

但返回類似的東西通常更有用

public String toString() {
    return localPart + "@" + domainName;
}

覆蓋 toString() 的原因是每次將非字符串類型的 object 添加到字符串時,編譯器都會隱式調用 toString()。 所以如果你有

MyObject o=new MyObject();
C="Hello " + o;

然后編譯器將調用 o.toString() 以獲得可以連接到“Hello”的字符串

我應該注意到它在調用 o 上的 toString() 之前檢查 o 是否為 null。 如果 o 是 null,它只會生成字符串“null”

意見:toString() 方法在一般情況下應該只用於調試(打印/日志),而不是作為正常程序流程的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM