Java中是否有任何内置合同检查对于hashcode和equals函数之间的契约?Java合同检查 - 内置?例如。哈希码/等于
对于这个问题,让我们坚持以hashcode/equals合同为例,但我一般感兴趣的是合同检查。我曾在多个地方读取equals和hashCode必须满足Java中的“合同”:
- 的Equals必须遵循的equivalence relation的三个规则,也必须是在重复调用一致
- 相等对象意味着等于哈希码
我了解条件,而且他们对我有意义。但是,我想知道,这仅仅是一个写在纸上的合同 - 本质上是开发人员不写出错误代码的强有力的指导原则 - 或者它会被Java作为编译时或运行时异常捕获的东西?
它不会被Java作为编译时或运行时异常捕获。 (编写代码)坚持继续RACT。 – nbokmans
如果等于相同并不意味着哈希码相同,那么你可以得到一些奇怪的行为。例如。相同的对象可以映射到散列映射中的不同桶。 –
谢谢你们,那就是我的想法。所以对于Java而言,它基本上是一个强有力的指导方针,不会编写那些将会非常糟糕和错误的代码......但是我们仍然可以在理论上编写一个违反合同的程序,并且它可以编译并运行良好,多年来没有任何错误变得明显。 –