क्यों कोई Objects.equal
प्रत्येक प्राचीन प्रकार के तर्क के रूप में प्राप्त नहीं किया जा रहा है?क्यों प्राचीन वस्तुओं के लिए 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.
}
इस equals
लागू करने के लिए सबसे अच्छा तरीका है कुछ है? आदिम मूल्यों को ऑटोबॉक्साइड किया जा रहा है, पीड़ित (यहां तक कि अगर यह थोड़ा है) एक प्रदर्शन गिरावट। मैं सिर्फ उनके लिए ==
का उपयोग कर सकता था, लेकिन मेरे लिए यह बराबर विधि को पढ़ने के "प्रवाह" को तोड़ देगा, इसे थोड़ा बदसूरत बना देगा। तो मुझे आश्चर्य है कि क्यों प्रत्येक अतिथि प्रकार के लिए guava lib के पास Objects.equal
नहीं है। क्या किसी को जवाब पता है?
संपादित
प्रत्येक आदिम (लेकिन बाइट) के लिए MoreObjects.toStringHelper अधिभार के लिए है, कि एक कारण मैंने सोचा के बारे में Objects#equal
के लिए होने नहीं है। इसके अलावा, JB Nizet तर्क का उपयोग करके, यह equals
विधि को सुरक्षित करेगा क्योंकि आप Integer
के लिए समान शुद्धता के बारे में चिंता किए बिना बदल सकते हैं।
आपके संपादन के बारे में - ऐसा लगता है कि 'ToStringHelper'' ऑब्जेक्ट्स 'का सदस्य है क्योंकि सभी' ऑब्जेक्ट 'उदाहरणों में' toString() 'सामान्य है। तथ्य यह है कि सहायक स्वयं 'int' तर्क लेता है, इत्यादि केवल इसलिए होता है क्योंकि 'ऑब्जेक्ट' में 'int' हो सकता है ('toString() 'परिणाम में शामिल किया जा सकता है)। उम्मीद है कि समझ में आता है। –
लेकिन यदि ऐसा इसलिए है क्योंकि आपके पास 'int' फ़ील्ड हो सकता है, तो यह' ऑब्जेक्ट्स # बराबर 'के लिए लागू होता है। हालांकि 'ऑब्जेक्ट्स # बराबर' से अलग, जिसे '==' द्वारा प्रतिस्थापित किया जा सकता है, ऑटोबॉक्सिंग से बचने के लिए आप 'स्ट्रिंगहेल्पर # एड' में कुछ भी नहीं उपयोग कर सकते हैं। इस प्रकार, आदिम तरीकों। या कम से कम यही मुझे लगता है: पी –