答案 0 :(得分:19)
我称之为差异"存在"。 Apache Commons中有EqualsBuilder
和HashCodeBuilder
,而番石榴中没有构建器。您从Guava获得的只是一个实用工具类MoreObjects
(从Objects
重命名,因为现在JDK中有这样的类。)
番石榴方法的优点来自于建造者的不存在:
JIT编译器可以通过Escape Analysis消除垃圾以及相关的开销。然后他们得到同样快的速度。
我个人认为构建者的可读性稍差。如果您发现没有更好地使用它们,那么番石榴肯定是适合您的。如您所见,静态方法足以完成任务。
另请注意,还有一个ComparisonChain,它是一种Comparable-builder。
答案 1 :(得分:0)
Guava在后台使用Arrays.hashCode()。 Varagrs会导致性能下降,并且可能会出现自动装箱的情况,这也会再次造成性能下降。根据Java的documentation
如果数组包含其他数组作为元素,则哈希码基于其标识而不是其内容
Objects.hasCode的替代方法可能是Objects.deepHashCode,但Guava并未采用。并且在循环引用的情况下有一个缺点
因此,在包含自身作为元素的数组上调用此方法是不可接受的
通常,Apache Commons的工作方式与deepHashCode相似,但可能会增加图像的反射效果并解决所有上述问题,但是(可以说)性能可能会更差。
表单设计观点Apache Commons实现了有效Java项目10和11制定的规则。这给它带来了非常不同的感觉