相关疑难解决方法(0)

等价方法的传递性

equals(object)方法的契约指定了要遵循的4个属性:自反,对称,传递和一致.虽然我理解不遵循Reflexive,Symmetric和Consistent的危险,并且肯定会同意其传递的好处,但我想知道如果违反Transitive属性会带来什么伤害?

具体来说,哪个Java库(或各种第三方库)需要依赖equals才能传递才能正常工作?根据我的理解,如果其他3个属性得到很好的实现,Collections框架将会起作用.

java

32
推荐指数
2
解决办法
6254
查看次数

为具有浮点成员的类实现"容忍"`equals`和`hashCode`

我有一个有float田地的课.例如:

public class MultipleFields {
  final int   count;
  final float floatValue;

  public MultipleFields(int count, float floatValue) {
    this.count = count;
    this.floatValue = floatValue;
  }

}
Run Code Online (Sandbox Code Playgroud)

我需要能够按值比较实例.现在我该如何正确实施 equals&hashCode

通常的方式来实现equals,并hashCode是只考虑各个领域.例如,Eclipse将生成以下内容equals:

  public boolean equals(Object obj) {
    // irrelevant type checks removed
    ....
    MultipleFields other = (MultipleFields) obj;
    if (count != other.count)
      return false;
    if (Float.floatToIntBits(floatValue) != Float.floatToIntBits(other.floatValue))
      return false;
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

(和类似的hashCode,基本上计算count* 31 + Float.floatToIntBits(floatValue)).

这个问题是我的FP值受到舍入错误的影响(它们可能来自用户输入,来自数据库等).所以我需要一个"宽容"的比较.

常见的解决方案是使用epsilon值进行比较(参见 …

java floating-point equals hashcode

10
推荐指数
1
解决办法
1369
查看次数

标签 统计

java ×2

equals ×1

floating-point ×1

hashcode ×1