Cae*_*alf 5 java performance guava
为什么Objects.equal每个原始类型都没有接收作为参数?
我知道你可以通过#valueOf自动装箱或让每个原语自动装箱,但是你不会因此而失去性能吗?这是我一直想知道的事情.
想象一下,我有类似的东西
public class Foo {
private final int integerValue;
private final boolean booleanValue;
private final Bar bar;
public Foo(int integerValue, boolean booleanValue, Bar bar) {
this.integerValue = integerValue;
this.booleanValue = booleanValue;
this.bar = bar;
}
@SuppressWarnings("boxing")
@Override
public boolean equals(Object object) {
if (object instanceof Foo) {
Foo that = (Foo) object;
return Objects.equal(this.integerValue, that.integerValue)
&& Objects.equal(this.booleanValue, that.booleanValue)
&& Objects.equal(this.bar, that.bar);
}
return false;
}
// hashCode implementation using guava also.
}
Run Code Online (Sandbox Code Playgroud)
这是实施的最佳方式equals吗?原始值将自动生成,并且(即使它有点)性能降低.我可以使用==它们,但对我来说它会破坏阅读equals方法的"流程",使它变得有点难看.所以我想知道为什么番石榴lib没有Objects.equal针对每种原始类型.有人知道答案吗?
编辑
还有的MoreObjects.toStringHelper超载每个原始的(但字节),这是一个我想知道没有了的原因Objects#equal.此外,使用JB Nizet参数,它会使equals方法更安全,因为您可以更改int为Integer而无需担心相同的正确性.
我可以使用
==它们,但对我来说它会破坏阅读equals方法的"流程",使它变得有点难看.
这并不足以说明为每种原始类型向Guava API添加该方法的重载 - 必须记录,测试和维护API公开的每个方法.当唯一的优点是美学时没有意义.
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |