为什么没有guava Objects.equal(Object,Object)到原始类型?

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方法更安全,因为您可以更改intInteger而无需担心相同的正确性.

番石榴文件

Pau*_*ora 6

我可以使用==它们,但对我来说它会破坏阅读equals方法的"流程",使它变得有点难看.

这并不足以说明为每种原始类型向Guava API添加该方法的重载 - 必须记录,测试和维护API公开的每个方法.当唯一的优点是美学时没有意义.

  • 对于每个试图找到某些东西的用户来说,成本包括"对象"类的Javadoc中的额外混乱,以及相当有限(和有争议的)的好处.另外,我不得不承认,我会发现_really odd_因为在名为`Objects`的类中对原始类型进行特殊的`equals`处理. (5认同)
  • +1,虽然我说这不是"令人信服的*足够的*理由". (2认同)