爲什麼沒有Objects.equal
接收每個原始類型的參數?爲什麼沒有guava Objects.equal(Object,Object)爲原始類型?
我知道你可以通過#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.
}
這是實現equals
的最佳方式?原始值將被自動複製,受到損害(即使有點)性能下降。我可以爲他們使用==
,但對我來說,它會打破閱讀等值方法的「流程」,使其變得有點難看。所以我想知道爲什麼番石榴lib沒有每種基本類型的Objects.equal
。有人知道答案嗎?
編輯
還有爲MoreObjects.toStringHelper超載每個原始的(但字節),這是一個我不知道的原因大概沒有爲Objects#equal
。此外,使用JB Nizet參數,它會改變方法的安全性,因爲您可以更改int
的Integer
,而不必擔心同等的正確性。
關於你的編輯 - ToStringHelper似乎是Objects的成員,因爲所有的Object都有'toString()'的共同點。輔助函數本身接受'int'參數等等的事實只是因爲一個'Object'可能包含一個'int'(被包含在'toString()'結果中)。希望這是有道理的。 –
但如果這是因爲你可能有一個'int'字段,那麼'Objects#equal'也是如此。雖然不同於'Object#equal',可以用'=='替代,但'StringHelper#add'中沒有什麼可以用來避免自動裝箱。因此,原始方法。或者至少這就是我的想法:P –