想象一下两个正整数A和B.我想将这两个整数组合成一个整数C.
可能没有其他整数D和E组合为C.因此将它们与加法运算符组合不起作用.例如30 + 10 = 40 = 40 + 0 = 39 + 1连接也不起作用.例如"31"+"2"= 312 ="3"+"12"
这种组合操作也应该是确定性的(总是在相同的输入下产生相同的结果)并且应该总是在整数的正侧或负侧产生整数.
基于各种糟糕的经历,我作为Java程序员的经验法则只是实现equals()和hashCode()不可变对象,其中对象的两个实例确实是可以互换的.
基本上我想避免像HashMap链接中的关键问题那样的情况,或者如下所示:
在我的Java职业生涯中,除了(1)值对象和(2)将东西放入集合之外,我还没有找到很多用处.我还发现,不变性+复制和修改构造函数/构建器通常比定位器更快乐.两个对象可能具有相同的ID,并且可能表示相同的逻辑实体,但如果它们具有不同的数据 - 如果它们在不同时间表示概念实体的快照 - 则它们不是.equals() equal()
无论如何,我现在在Hibernate商店,我更熟悉Hibernate的同事告诉我这种方法不会起作用.具体而言,声称似乎是在以下情况中 -
h1.h4.-除非h1.equals(h4)(或许h4.equals(h1),我不太清楚,但我希望它是传递反正所以不管),Hibernate将不能够告诉这些都是一样的东西,坏的事情会发生.
那么,我想知道的是:
equals()用于什么?h1并且h4相同,它是如何(以及我们如何)跟踪哪一个是修改版本?注:我读过实现equals()和hashCode()在Hibernate文档,它不处理,我担心的情况来看,至少直接,也没有任何细节什么的Hibernate真正需要出来解释equals()和hashCode().Hibernate中的equals和hashcode的答案也没有,或者我不打算发布这个.
由于与问题没有太大关系的各种原因,我有一个带有由两个整数组成的复合键的表,我想从这两个数字中创建一个唯一的键.我最初的想法只是将它们连接起来,但是当我意识到(51,1)的复合键会产生与(5,11)相同的唯一键时,我很快就遇到了问题,即511.
有没有人有一种聪明的方法来生成两个整数中的整数,这样生成的整数对于一对起始整数是唯一的?
编辑:在面对令人印象深刻的数学后,我意识到我应该包括的一个细节是有问题的键的大小.在始发对中,第一个密钥当前是6位数,并且在系统的生命周期中可能保持7位数; 第二个关键还没有超过20个.鉴于这些限制,看起来问题就不那么令人生畏了.
我无权访问基类代码.但是需要能够在子类中定义equals,同时考虑一些基类属性.
此外,基类没有受保护的字段.所有字段只能通过访问者/ mutator访问.
仅仅对子类等于的基类字段进行比较会被认为是不好的吗?为什么?
我需要这样做,因为我的基类有一个默认等于不适用于我的目的,但它也有一些字段,当做一个子类等于时需要考虑...