我很想知道,人们在这里想到使用
org.apache.commons.lang.builder EqualsBuilder/ HashCodeBuilder
实现equals/ hashCode?这比写自己更好吗?它与Hibernate相处得好吗?你怎么看?
我在很多地方读过,虽然equals在Java中覆盖hashCode方法,也应该覆盖方法,否则就是"违反合同".
但到目前为止,如果我只覆盖equals方法,而不是hashCode方法,我没有遇到任何问题.
合同是什么?当我违反合同时,为什么我没有遇到任何问题?如果我没有覆盖hashCode方法,在哪种情况下我会遇到问题?
几天前我们在公司内部切换到了Java 7--最后!Jay\o /所以我发现了这个Objects类,并且惊讶于方法的实现有多短,hashCode()并且equals()与默认的eclipse(ALT + SHIFT + S - > H)生成的代码相比减少了许多boylerplate代码.
我在想,如果发生日食的默认行为,我可以改变hashCode()和equals()?
我很想看到这个:
@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((one == null) ? 0 : one.hashCode());
result = prime * result + ((two == null) ? 0 : two.hashCode());
result = prime * result …Run Code Online (Sandbox Code Playgroud)