Kotlin数据类中如何忽略指定变量参与equals方法判断?
Kotlin中是否存在类似transient的关键字忽略数据类equals比较?
Kotlin本身没有专门用来标记数据类属性不参与equals()/hashCode()的关键字,但可以利用数据类的特性实现你的需求,无需手动重写整个方法:
注意:Java的
@Transient注解在Kotlin中是支持的,但它仅作用于序列化过程,不会让属性排除在自动生成的equals()/hashCode()逻辑之外,所以无法满足你的需求。可行方案:利用Kotlin数据类的核心特性——自动生成的
equals()/hashCode()仅基于主构造函数中声明的属性。把不需要参与比较的
isFavourite属性移出主构造函数,放到类体中作为普通成员属性即可:// 修改前的数据类(isFavourite在主构造,会参与equals) data class Product( val id: String, val name: String, // 其他大量属性... val isFavourite: Boolean ) // 修改后的数据类(isFavourite在类体,不参与equals) data class Product( val id: String, val name: String, // 其他所有需要参与equals比较的属性... ) { var isFavourite: Boolean = false // 类体属性,自动排除在equals/hashCode之外 }这样修改后,两个
Product实例的equals()比较会自动忽略isFavourite的值,完全不用手动编写复杂的equals逻辑,后续主构造函数的属性变动时,自动生成的方法也会同步更新。
内容的提问来源于stack exchange,提问作者Taimoor Khan
相关产品推荐
相关产品推荐

