我在Kotlin中有一個數據類別,它有多個屬性,其中之一是ID
。但是當我在代碼中實際使用compare
函數時,我想在比較時排除此ID
屬性。有沒有辦法做到這一點,除了手動鍋爐功能compare
功能?在沒有ID的情況下在Kotlin中比較數據類別
0
A
回答
1
您可以在其中一個數據類實例上使用copy()
function來創建它的副本「更改某些的屬性」。例如: -
data class User(val id: Long, val name: String)
val a = User(1, "John")
val b = User(2, "John")
println(a == b) // false
println(a.copy(id = b.id) == b) // true
創建數據類實例的一個副本,並改變ID是一樣的,你要比較反對允許有效地忽略該屬性的另一個實例。
你也可以複製兩個數據類的實例,並設置id
一些共同的價值,但如果你只是做一次性的比較那麼這將是copy()
不必要的電話。
1
數據類產生equals
功能(不產生compare
)基於被在主構造函數聲明的屬性,所以如果你想它不是比較的ID,你就必須在ID
財產移出的主要構造函數。
顯而易見的部分是你必須將屬性移動到類的主體,但是你還必須使它成爲var
,因爲它不會在主構造函數中初始化(不能將它設爲val
並將其初始化爲init
塊中的默認值,因爲那樣您無法在次構造函數中將其分配給它)。
的你如何能做到這樣的一個例子:
data class User(val id: Long, val name: String)
data class ModifiedUser(val name: String) {
var id: Long = 0
constructor(id: Long, name: String) : this(name) {
this.id = id
}
}
val u1 = User(1, "John")
val u2 = User(2, "John")
println(u1 == u2) // false
val m1 = ModifiedUser(1, "Sally")
val m2 = ModifiedUser(2, "Sally")
println(m1 == m2) // true
它是由你來決定哪種方式適合你更好,但也許這是最簡單的,只是重寫equals
(and by implication, hashCode
)以獲得所需的結果,至少它只包含一次與此相關的代碼,而上述解決方案可能會讓您的課程變得複雜。
+0
哇,這一切都不寫'equals'? – voddan
相關問題
- 1. 在沒有登錄的情況下比較magento中的產品
- 2. 比較在兩種情況下
- 3. 類別在沒有產品的情況下導入Magento
- 4. 避免在沒有數據的情況下在mongoDB中插入
- 5. 在沒有ORM的情況下在Python中使用數據庫
- 6. 在沒有Vlookup的情況下匹配數組中的數據
- 7. 在不刪除現有類別的情況下添加類別
- 8. 如何在沒有開關的情況下或在C#中對3種情況進行比較?
- 9. 在這種情況下,Regex比數組比較快嗎?
- 10. 如何在沒有數據庫的情況下收集數據
- 11. Android:ListFragment,沒有數據和數據正在加載的情況下
- 12. 在沒有'foreach'的情況下檢索Webmatrix中的數據
- 13. 在沒有別名的情況下獲取Joomla中的鏈接?
- 14. 在有或沒有索引的情況下複製數據庫?
- 15. 在沒有子類的情況下在UIView中繪製UIBezierPaths?
- 16. 在沒有OutOfMemoryError的情況下加載較大的圖像
- 17. 爲什麼在以下情況下沒有數據競爭?
- 18. 特殊情況下插入排序的最壞情況比較
- 19. 在沒有數據庫的情況下在C#中構建業務類別集合
- 20. 函數可以在沒有類的情況下調用嗎? php
- 21. 在沒有Oauth的情況下訪問用戶的github數據
- 22. 在沒有bodyParser的情況下從AngularJS的Node.js請求數據
- 23. 如何在沒有id的情況下使用innerHTML HTML標籤?
- 24. 如何在沒有ID的情況下單擊按鈕
- 25. 在沒有ID的情況下更改特定實例
- 26. 我可以在沒有ID的情況下放入嗎?
- 27. 如何在沒有ID的情況下單擊按鈕?
- 28. 如何在沒有連接的情況下獲得FB ID
- 29. 短跑情況下(Kebab的情況下)的數據在角2
- 30. Python - 在兩種情況下比較兩個數據幀的相等性
這看起來像我正在尋找的。我可以在1行中實現數據類本身的這種比較方法。謝謝。 – arslancharyev31