gpt4 book ai didi

java - Guava 与 Apache Commons Hash/Equals 构建器的对比

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:59 24 4
gpt4 key购买 nike

我想知道 Guava 与 Apache Commons 在 equals 和 hashCode 构建器方面的主要区别是什么。

等于:

Apache 公地:

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);
}

哈希码:

Apache 公地:

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中有EqualsBuilderHashCodeBuilder,Guava中没有构建器。你从 Guava 得到的只是一个实用类 MoreObjects(从 Objects 重命名,因为现在 JDK 中有这样一个类)。

Guava 方法的优势来自于构建器的不存在:

  • 它不产生垃圾
  • 更快

JIT 编译器可能通过 Escape Analysis 消除垃圾以及相关的开销。然后他们变得同样快,因为他们做的完全一样。

我个人认为构建器的可读性稍微好一些。如果您发现它们不能更好地使用,那么 Guava 无疑是适合您的选择。如您所见,静态方法足以完成任务。

另请注意,还有一个 ComparisonChain这是一种 Comparable-builder。

关于java - Guava 与 Apache Commons Hash/Equals 构建器的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31058353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com