2
我有一個類是一個字符串的解析結果,所以我必須執行toString()來返回該源字符串,而不是那些解析的值。它還具有自定義equals()/ hashCode()機制。將它標記爲數據類還有什麼好處嗎?即使我實現所有的hashCode(),equals()和toString(),我應該使用數據類嗎?
我有一個類是一個字符串的解析結果,所以我必須執行toString()來返回該源字符串,而不是那些解析的值。它還具有自定義equals()/ hashCode()機制。將它標記爲數據類還有什麼好處嗎?即使我實現所有的hashCode(),equals()和toString(),我應該使用數據類嗎?
數據類的自動生成的部分是:
編譯器自動導出從主構造中聲明的所有 屬性下列成員:
- equals()/hashCode() pair, - toString() of the form "User(name=John, age=42)", - componentN() functions corresponding to the properties in their order of declaration, - copy() function.
如果任何的這些功能是在類體中明確定義或從基類繼承的 ,它不會被生成。
的componentN()
功能可使解構像for ((a, b, c) in dataClass) { ... }
然而,數據類不能繼承。 (你可以定義一個擴展另一個非數據類的數據類)
如果你認爲某些類可能擴展你的類,那麼不要把它作爲數據類。
如果您認爲將來沒有類會擴展您的類,並且您可能需要銷燬或copy()函數,那麼將其設爲數據類。
感謝您列出所有這些。我現在有信心將其標記爲數據類。它不應該以任何方式擴展並且可以使用解構。 – glee8e