为了账号安全,请及时绑定邮箱和手机立即绑定

实施平等合同的正确方法

实施平等合同的正确方法

aluckdog 2019-10-11 15:14:30
我有一个名为User的域对象。用户的属性包括ssoId,名称,电子邮件,createdBy,createdDate和userRole。其中,ssoId必须是唯一的,因为两个用户不能具有相同的sso id。因此,我的equals方法检查sso id并返回true或false。@Override public boolean equals(Object o) {    if (!(o instanceof User))      return false;    return user.getSsoId().equals((User)o.getSsoId());}我认为这是一个错误的实现,尽管就业务规则而言是正确的。对于具有相同sso id但名称或电子邮件或两者具有不同值的两个对象,以上实现将返回true。我应该更改我的平等合约以检查所有字段的相等性吗?你有什么建议?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

你在做什么似乎罚款,而你没有违反任何规则是equals必须遵守。


您可能仍然想要检查其他字段,而不是更改equals的语义,而是检测业务逻辑中的不一致之处,并可能触发断言/异常。


查看完整回答
反对 回复 2019-10-11
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

这是一个棘手的决定。

这是我几个月前考虑进行哈希处理时遇到的一个问题。我建议您阅读一下什么是哈希,因为它与您的答案高度相关...我建议您正在寻求实现某种哈希并测试其相等性。

等同性有不同的种类...对象的身份等同,对象的数据等同,整个对象的等同...您也可以在其中包括审核信息。

事实是,“相等”具有许多可能的含义。

我通过在所有领域中将严格实现为平等来解决此问题,只是因为在询问之后,它似乎是平等的直观含义。然后,我为所需的其他种类的相等性构造了方法,并定义了一个包装这些方法的接口。

我不会在对象==上测试相等性,因为经常会用相同的数据测试两个不同的对象,尽管我的书指的是不同的内存地址,但在我的书中它们是相等的。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 439 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信