在 Java 中重寫 toString() 方法的 10 個技巧 - ToStringBuilder Netbeans Eclipse
Java toString 方法
toString
Java 中的方法用於Object
以人類可讀的形式提供有關物件 () 的清晰且充分的資訊。正確的方法重寫toString
可以透過提供有價值且重要的資訊來幫助記錄和調試Java 程式。由於toString()
它是在java.lang.Object
類別中定義的,並且其預設實現不提供太多信息,因此最佳實踐始終是在後代類別中重寫此方法。事實上,如果您正在建立Order
、Trade
或類型的重要或通用類Employee
,請始終重寫Java 中的equals、hashCode、CompareTo和方法。toString
預設情況下,實作以toString
形式產生輸出,package.class@hashCode
例如,對於我們的範例,類別方法將列印 test.Country@18e2b22,其中 18e2b22 是物件的十六進位哈希碼,如果呼叫hashCode方法,它將傳回260943370,這是十進制相當於 18e2b22。在搜尋問題時,此資訊並不是特別有用。讓我們看一個現實生活中的示例,您需要查找網絡連接中的問題,如果您想知道系統正在嘗試連接到哪個主機和端口,並且是否或僅打印默認信息,它將是無法想像真正的問題,但透過重寫的實現,它們可以提供有用的信息,例如主機名稱和連接埠號碼。在本 Java 教程中,我們將透過程式碼範例給出一些有關方法重寫的技巧。 toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
如何在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 ,那麼使用StringBuilder
and 方法append()
而不是 + 運算子進行組合toString
也是一種可行的方法。預設情況下,Eclipse 和 Netbeans 都toString
使用串聯運算子產生。
使用@Override註解
在 Java 中使用@Override
方法重寫是該語言的最佳實踐之一。但這個提示並不像重寫equals()
and方法那麼重要compareTo()
,因為重載而不是重寫可能會產生更難以計算的微妙錯誤。無論如何,最好使用註解@Overrride
。
列印數組的內容而不是列印數組對象
數組是 Java 中的一個對象,但它不會覆蓋方法toString
,並且當您列印數組時,預設輸出格式不是很有用,因為我們希望查看數組的內容。順便說一句,這也是char[] 陣列比 String 更適合儲存密碼等敏感資料的另一個原因。花點時間看看列印陣列的內容是否對您的客戶有幫助,如果有意義,則列印陣列的內容而不是物件本身。出於效能原因,最好使用Collection
此類ArrayList
或HashSet來取代Array
儲存其他物件。
額外提示
關於 Java 中方法重寫的一些額外提示toString
。
-
toString
根據輸出的長度以多行或一行列印輸出。 -
在表示中包含完全限定的類別名
toString
,換句話說,package.class
以避免任何誤解。 -
您可以跳過空值或顯示它們,但最好顯示它們。有時它們很有用,因為它們顯示在某些事件期間存在哪個字段
null
,例如NullPointerException。 -
使用鍵值格式,例如
member.name=member.value
,大多數 IDE 都支援這種格式。 -
如果您認為繼承的成員應該向繼承類別提供必要的信息,請包括它們。
-
有時,一個物件包含許多可選和必需的參數,正如我們在Builder 模板範例中所示,當幾乎不可能列印所有字段時,在這種情況下,我們只能列印必需的字段,特別是因為我們有可選字段。
GO TO FULL VERSION