簡體   English   中英

當我們覆蓋toString()方法時,我們應該總是返回對象的字符串表示?

[英]When we override the toString() method we should always return a string representation of the object?

實際上,toString方法應返回對象的String表示形式。

在一個項目中,我發現了一些覆蓋toString方法的類,允許返回null。

喜歡:

@Override
public String toString() {
    .......
    return null;
}

對我來說,這種做法違反了toString方法的主要建議,該方法應該返回對象的String表示。

Object.toString()的API文檔說:

public String toString()

返回對象的字符串表示形式。 通常,toString方法返回一個“文本表示”此對象的字符串。 結果應該是一個簡潔但信息豐富的表示,便於人們閱讀。 建議所有子類都重寫此方法。

當我們覆蓋Object的toString()方法時,你永遠不應該返回null?

toString主要用於表示受眾是程序員的事情,比如調試和日志記錄,我們需要查看對象的某些文本版本。 當您在日志文件或調試器中看到對象時,使用對您有用的信息。 從Effective Java,第3章,第10項:

雖然它不像遵守equals和hashCode合同那樣重要(Item 8,Item 9),但是提供一個好的toString實現會讓你的類更加愉快。 將對象傳遞給println,printf,字符串連接運算符或斷言或由調試器打印時,會自動調用toString方法。

Object#toString的API文檔中的建議是:

通常,toString方法返回一個“文本表示”此對象的字符串。 結果應該是一個簡潔但信息豐富的表示,便於人們閱讀。 建議所有子類都重寫此方法。

返回null將永遠不會被視為提供信息,並且很容易產生誤導。 似乎有人使用toString來做一些它從未打算過的事情。

Java語言規范不禁止從toString()返回null。 相反,它明確承認可以返回null。

第4.3.1節:對象

字符串連接運算符+(§15.18.1),當給定String操作數和引用時,將通過調用引用對象的toString方法將引用轉換為String(如果引用或引用,則使用“null”) toString的結果是空引用)

您引用的文本來自Object.toString()的API文檔。 和你一樣,我讀它時強烈暗示返回一個非null值。

返回非空值將是最有用的。 返回null可能會在調試器中造成混淆,因此難以區分空引用和非常好的非空引用,以及來自toString()的遺憾的null返回值。

只要應用程序可行 ,就應該覆蓋toString()方法。

至於返回null,我發現完全沒用,因為toString()主要在調試期間使用。 所以不,你永遠不應該從toString()方法返回null。

你不能修復愚蠢,但你可以從中學習。

toString()是Object的“人類”表示,像Nathan一樣用於調試,也可以作為應用程序中表示的“速度方法”。

有時候人們正在混合toString()與序列化/反序列化(必須包括所有重要的(非瞬態)字段)並且由於讀取值的算法而准確。

從我的角度來看,你不應該在toString()方法中返回null。

它沒有提供信息也無法使用。 相反,使用toString()方法為數據模型類實例返回正確且信息豐富的字符串將幫助您和您的團隊成員使用您的類並將它們合並到更復雜的數據結構中。

這看起來像ToString()的自定義用法。 這種覆蓋方法完全基於用戶試圖根據他/她的需要實現的實現。 據我所知,只要用戶期望返回此值,返回null就沒有壞處,因為null可以存儲在字符串數據類型中。

但是,除非你有充分的理由去做,否則覆蓋ToString不是一個好習慣。

暫無
暫無

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

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