JavaRush /Java Blog /Random-TW /在 Java 中重寫 toString() 方法的 10 個技巧(第 1 部分)
Ku6ep
等級 35

在 Java 中重寫 toString() 方法的 10 個技巧(第 1 部分)

在 Random-TW 群組發布
在 Java 中重寫 toString() 方法的 10 個技巧 - ToStringBuilder Netbeans Eclipse 在 Java 中重寫 toString() 方法的 10 個技巧(第 1 部分) - 1

Java toString 方法

toStringJava 中的方法用於Object以人類可讀的形式提供有關物件 () 的清晰且充分的資訊。正確的方法重寫toString可以透過提供有價值且重要的資訊來幫助記錄調試Java 程式。由於toString()它是在java.lang.Object類別中定義的,並且其預設實現不提供太多信息,因此最佳實踐始終是在後代類別中重寫此方法。事實上,如果您正在建立OrderTrade或類型的重要或通用類Employee,請始終重寫Java 中的equalshashCodeCompareTo和方法。toString預設情況下,實作以toString形式產生輸出,package.class@hashCode例如,對於我們的範例,類別方法將列印 test.Country@18e2b22,其中 18e2b22 是物件的十六進位哈希碼,如果呼叫hashCode方法,它將傳回260943370,這是十進制相當於 18e2b22。在搜尋問題時,此資訊並不是特別有用。讓我們看一個現實生活中的示例,您需要查找網絡連接中的問題,如果您想知道系統正在嘗試連接到哪個主機和端口,並且是否或僅打印默認信息,它將是無法想像真正的問題,但透過重寫的實現,它們可以提供有用的信息,例如主機名稱和連接埠號碼。在本 Java 教程中,我們將透過程式碼範例給出一些有關方法重寫的技巧。 toString()toString()CountrySocketServerSockettoStringtoStringtoString

如何在Java中重寫toString方法:

列印格式化日期(即日/月/年)而不是原始值。當重寫 Java 方法時,這是一個非常有用的提示toString。常規toString()類別java.util.Date不會輸出格式化日期,並且包含許多不總是需要的詳細資訊。如果您使用部分DateFormat即 dd-MM-yy 在您的應用程式中,那麼您肯定希望看到這種格式而不是預設格式。IDE 通常不會產生格式化輸出Date,這是您需要自己做的事情,但這是值得的。有關 Java 格式化的詳細信息,請閱讀如何在 Java 中以 ddMMyy 格式列印日期Date。您也可以使用SimpleDataFormat類別或 Joda Date 時間庫來實現此目的。

記錄 toString 格式

如果您的方法toString()不將資料輸出為 field=value,那麼最好記錄輸出格式toString,特別是對於 Employee 或 Student 等重要物件。例如,如果一個toString()類別方法Работник(Employee)列印“ John-101-Sales-9846387321 ”,那麼一個好的做法是將格式指定為“name-id-department-contact”,但同時不允許客戶端獲取從方法中獲取信息,您應該始終提供適當的方法來檢索數據,toString()例如getName(),,等等,因為從物件表示中獲取的資訊是脆弱且容易出錯的,因此客戶端應該始終有一個乾淨的路徑來獲取資訊。 getId()getContact()toString()

使用 StringBuilder 組合 toString() 的輸出

如果您正在為 Java 中的方法編寫程式碼toString(),請使用StringBuilder新增單獨的屬性。如果您使用的是Eclipse、Netbeans 或 IntelliJ等 IDE ,那麼使用StringBuilderand 方法append()而不是 + 運算子進行組合toString也是一種可行的方法。預設情況下,Eclipse 和 Netbeans 都toString使用串聯運算子產生。

使用@Override註解

在 Java 中使用@Override方法重寫是該語言的最佳實踐之一。但這個提示並不像重寫equals()and方法那麼重要compareTo(),因為重載而不是重寫可能會產生更難以計算的微妙錯誤。無論如何,最好使用註解@Overrride

列印數組的內容而不是列印數組對象

數組是 Java 中的一個對象,但它不會覆蓋方法toString,並且當您列印數組時,預設輸出格式不是很有用,因為我們希望查看數組的內容。順便說一句,這也是char[] 陣列比 String 更適合儲存密碼等敏感資料的另一個原因。花點時間看看列印陣列的內容是否對您的客戶有幫助,如果有意義,則列印陣列的內容而不是物件本身。出於效能原因,最好使用Collection此類ArrayListHashSet來取代Array儲存其他物件。

額外提示

關於 Java 中方法重寫的一些額外提示toString
  1. toString根據輸出的長度以多行或一行列印輸出。

  2. 在表示中包含完全限定的類別名toString,換句話說,package.class以避免任何誤解。

  3. 您可以跳過空值或顯示它們,但最好顯示它們。有時它們很有用,因為它們顯示在某些事件期間存在哪個字段null,例如NullPointerException

  4. 使用鍵值格式,例如member.name=member.value,大多數 IDE 都支援這種格式。

  5. 如果您認為繼承的成員應該向繼承類別提供必要的信息,請包括它們。

  6. 有時,一個物件包含許多可選和必需的參數,正如我們在Builder 模板範例中所示,當幾乎不可能列印所有字段時,在這種情況下,我們只能列印必需的字段,特別是因為我們有可選字段。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION