我有一些代碼,例如:怎樣的Java中實現Objects.hashcode 1.6
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + Objects.hashCode(this.bendWidth);
hash = 47 * hash + Objects.hashCode(this.bendSideLength);
hash = 47 * hash + Objects.hashCode(this.thickness);
hash = 47 * hash + Objects.hashCode(this.innerRadius);
hash = 47 * hash + Objects.hashCode(this.bendAngle);
hash = 47 * hash + Objects.hashCode(this.kfactor);
hash = 47 * hash + Objects.hashCode(this.bendShortening);
return hash;
}
,我期待,使這個源碼工作1.6
到目前爲止,我已經試過番石榴:
@Override
public int hashCode() {
int hash = 5;
Object[] objs = new Object[]{
this.getPointND().getPoint()[0],
this.getPointND().getPoint()[1],
this.getPointND().getPoint()[2],
this.getPointND().getPoint()[3],
this.getPointND().getPoint()[4],
this.kfactor,
this.bendShortening
};
hash = 47 * hash + Objects.hashCode(objs);
hash = 47 * hash + Objects.hashCode(this.bendWidth);
hash = 47 * hash + Objects.hashCode(this.bendSideLength);
hash = 47 * hash + Objects.hashCode(this.thickness);
hash = 47 * hash + Objects.hashCode(this.innerRadius);
hash = 47 * hash + Objects.hashCode(this.bendAngle);
hash = 47 * hash + Objects.hashCode(this.kfactor);
hash = 47 * hash + Objects.hashCode(this.bendShortening);
return hash;
}
而且我已經嘗試瞭解決方案,所以:
@Override
public int hashCode() {
int hash = 5;
Object[] objs = new Object[]{
this.getPointND().getPoint()[0],
this.getPointND().getPoint()[1],
this.getPointND().getPoint()[2],
this.getPointND().getPoint()[3],
this.getPointND().getPoint()[4],
this.kfactor,
this.bendShortening
};
hash = 47 * hash + Objects.hashCode(objs);
hash = 47 * hash + Objects.hashCode(this.bendWidth);
hash = 47 * hash + Objects.hashCode(this.bendSideLength);
hash = 47 * hash + Objects.hashCode(this.thickness);
hash = 47 * hash + Objects.hashCode(this.innerRadius);
hash = 47 * hash + Objects.hashCode(this.bendAngle);
hash = 47 * hash + Objects.hashCode(this.kfactor);
hash = 47 * hash + Objects.hashCode(this.bendShortening);
return hash;
}
但還是這個測試返回失敗:
@Test
public void testHashCodeIsDifferentHashCode() {
try {
DataPoint pointOne = new DataPoint();
pointOne.setBendAngle(new Double(1));
pointOne.setBendShortening(new Double(1));
pointOne.setBendSideLength(1);
pointOne.setBendWidth(1);
pointOne.setInnerRadius(1);
pointOne.setKfactor(new Double(1));
pointOne.setThickness(1);
DataPoint pointTwo = new DataPoint();
pointTwo.setBendAngle(0);
pointTwo.setBendShortening(new Double(0));
pointTwo.setBendSideLength(0);
pointTwo.setBendWidth(0);
pointTwo.setInnerRadius(0);
pointTwo.setKfactor(new Double(0));
pointTwo.setThickness(0);
DataPoint pointThree = new DataPoint();
pointThree.setBendAngle(Double.NaN);
pointThree.setBendShortening(Double.NaN);
pointThree.setBendSideLength(Double.NaN);
pointThree.setBendWidth(Double.NaN);
pointThree.setInnerRadius(Double.NaN);
pointThree.setKfactor(Double.NaN);
pointThree.setThickness(Double.NaN);
Set<DataPoint> map = new HashSet<DataPoint>();
map.add(pointOne);
map.add(pointTwo);
assert (map.size() == 2);
} catch (NullPointerException ex) {
assert false : "failed due to null";
} catch (Exception ex) {
assert false : "failed, unknown error.";
}
}
試過這樣:
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + Objects.hashCode(this.bendWidth);
hash = 47 * hash + Objects.hashCode(this.bendSideLength);
hash = 47 * hash + Objects.hashCode(this.thickness);
hash = 47 * hash + Objects.hashCode(this.innerRadius);
hash = 47 * hash + Objects.hashCode(this.bendAngle);
hash = 47 * hash + Objects.hashCode(this.kfactor);
hash = 47 * hash + Objects.hashCode(this.bendShortening);
return hash;
}
public class Objects {
public static int hashCode(Object object) {
return object == null ? 0 : object.hashCode();
}
}
我等於解決方案是這樣:
@Override
public boolean equals(Object obj) {
if (obj instanceof DataPoint) {
DataPoint od = (DataPoint) obj;
return (this.bendAngle == od.bendAngle)
&& (this.bendShortening == od.bendShortening)
&& (this.bendSideLength == od.bendSideLength)
&& (this.bendWidth == od.bendWidth)
&& (this.innerRadius == od.innerRadius)
&& (this.kfactor == od.kfactor)
&& (this.thickness == od.thickness);
}
return false;
}
不,這是在jdk 1.7中添加的。你將不得不推出你自己的解決方案。 –
不,沒有。 –
在任何情況下,您選擇的IDE都應該具有一些智能的「生成equals()和hashcode()」函數。 – vikingsteve