私は、プロパティの数を持つKotlinにデータクラスを持っています。その1つはID
です。しかし、私が実際にコードでcompare
関数を使用している場合は、比較するときにこのID
プロパティを除外したいと思います。 compare
機能を手動でボイラーメッキする以外は何もできませんか?IDなしのKotlinのデータクラスを比較します
答えて
データクラスインスタンスのいずれかで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()
の不要な呼び出しになります。
データクラスは、プライマリコンストラクタで宣言されているプロパティに基づいてequals
機能(compare
が発生していない)を生成するので、あなたはそれがIDを比較していない場合は、あなたはアウトID
プロパティを移動する必要がありますプライマリコンストラクタの
明示的な部分は、プロパティをクラスの本体に移動する必要がありますが、プライマリコンストラクタでは初期化されないため、var
にする必要がありますval
にして、init
ブロックの既定値に初期化します。これは、2次コンストラクターで割り当てることができないためです)。
あなたがこれを行うことができる方法の例:
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
)をオーバーライドするのが最も簡単です少なくとも、これに関連するコードは一度の場所にありますが、上記の解決策はクラスをかなり複雑にする可能性があります。
うわー、これはすべて「等しく」書かないのですか? – voddan
- 1. Proguard - Kotlinデータクラスを難読化しない
- 2. kotlinデータクラスHttpMessageNotReadableException
- 3. Json to kotlinデータクラス
- 4. KotlinとObjectBox:データクラスの関係
- 5. Kotlinのデータクラス、Androidルームとカスタムセッター
- 6. Spring/Jacksonを使用したKotlinデータクラス
- 7. kotlinテスト:比較障害
- 8. IDの値を比較して色を変更します
- 9. Kotlin Ktorは、位置データクラス
- 10. KotlinデータクラスとNULL可能タイプ
- 11. KotlinデータクラスGsonシリアル化問題
- 12. Kotlin /アンドロイド - ラムダとデータクラスでKotlinReflectionInternalError
- 13. kotlinデータクラス+ bean検証jsr 303
- 14. 私はすべての適格なKotlinクラスをデータクラスにしませんか?
- 15. Javaインターフェイスを実装するKotlinデータクラス
- 16. メモ化Kotlinデータクラスのメンバ関数の次Kotlinの例で
- 17. ユニットテスト中のIDに基づいてエンティティを比較します
- 18. Kotlinの構造化変数がペア、トリプル、またはデータクラスで動作しない
- 19. 比較型IDポインタ
- 20. Kotlinでは、コンストラクタパラメータがゼロのデータクラスをどのように宣言しますか?
- 21. SpringBoot + Jackson + Kotlinデータクラス:フィールド注釈が無視されました
- 22. idのデータを比較する
- 23. 行数を比較し、行を比較します。クエリMysql PHP
- 24. ファイル::比較の比較は常に-1を返します
- 25. ユニークキーなしのデータ比較
- 26. /符号なしの比較
- 27. 比較を使用しないデータ型の比較
- 28. gitはブランチ間でコミットIDを比較します
- 29. 私は結果に得た同じIDを比較します
- 30. Spring JPAはKotlinデータクラスのカスタムセッターでフィールドをマップできません
これはまさに私が探していたもののようです。このような比較メソッドをデータクラス自体に1行で実装できます。ありがとう。 – arslancharyev31