我想知道Guava与Apache Commons之间关于equals和hashCode构建器的主要区别是什么。
等于:
Apache Commons:
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) { return false; }
MyClass other = (MyClass) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(field1, other.field1)
.append(field2, other.field2)
.isEquals();
}
Guava
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) { return false; }
MyClass other = (MyClass) obj;
return Objects.equal(this.field1, other.field1)
&& Objects.equal(this.field1, other.field1);
}
hashCode :
Apache Commons:
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(field1)
.append(field2)
.toHashCode();
}
Guava
public int hashCode() {
return Objects.hashCode(field1, field2);
}
关键区别之一似乎是使用Guava版本提高了代码可读性。
我从https://code.google.com/p/guava-libraries/wiki/CommonObjectUtilitiesExplained找不到更多信息。知道是否存在更多差异(尤其是性能改进?)会很有用。
最佳答案
我将这种差异称为“存在”。 Apache Commons中有EqualsBuilder
和HashCodeBuilder
,而Guava中没有构建器。从Guava那里获得的只是一个实用程序类MoreObjects
(从Objects
重命名,因为现在JDK中有这样的类)。
Guava 方法的优点来自于 builder 的不存在:
JIT编译器可以通过Escape Analysis以及相关的开销消除垃圾。然后,它们的速度与完全相同的速度一样快。
我个人认为这些构建器更具可读性。如果您发现更好地使用它们,那么 Guava 无疑是您的正确选择。如您所见,静态方法足以完成任务。
还请注意,还有一种ComparisonChain,它是一种Comparable-builder。
关于java - Guava与Apache Commons Hash/Equals构建器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31058353/