वहाँ एक जावा मानक "दोनों अशक्त या बराबर" स्थिर विधि है?


101

कुछ टाइपिंग को बचाने और मेरे कोड को स्पष्ट करने के लिए, निम्नलिखित विधि का एक मानक संस्करण है?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

क्या कोई कह सकता है कि ऐसी चीज़ कहाँ उपयोगी है?
anjanb

2
यह सिर्फ आपको अपने बराबर () पद्धति में अशक्त चेक को छोड़ने की अनुमति देता है।
माइकल मायर्स

1
यदि आप किसी संग्रह को कार्यान्वित कर रहे हैं, तो आपकी .contains () विधि, जब दिए गए "o" को "परीक्षण" करने की आवश्यकता होती है, यदि इस संग्रह में कम से कम एक तत्व e ऐसा हो (o == null? E == null: o.equals (e) ))। " इसी तरह, आपके .remove () विधि को ऐसे तत्व को निकालना होगा।
newacct

6
केवल मेरे दो सेंट्स। मैं उपयोग करूँगा: सार्वजनिक स्थैतिक बूलियन दोनों NullOrEqual (ऑब्जेक्ट x, ऑब्जेक्ट y) {वापसी (x = = y) (x! = Null && x.equals (y))); } IMHO, यह नौसिखिए प्रोग्रामर के लिए अधिक पठनीय है।
m_vitaly

1
एक अन्य उपयोग मामला: एक मान की तुलना यह देखने के लिए करें कि क्या यह एक गंदे जाँच के दौरान उसके पिछले मूल्य से बदल गया है।
Neromancer

जवाबों:


193

जावा 7 के साथ अब आप सीधे एक सुरक्षित बराबरी कर सकते हैं:

ऑब्जेक्ट-असेंबल (x, y)

(जकार्ता कॉमन्स पुस्तकालय ObjectUtils.equals () जावा 7 के साथ अप्रचलित हो गया है)


यह विधि Googles Dependency injection-libray Guice में भी लागू की गई है।
नील्स

1
वसंत भी एक समान विधि लागू करता है: ऑब्जेक्ट क्लास पर nullSafeEquals
jpsstavares

2
Google अमरूद में ऑब्जेक्टसेक्शुअल () भी है।
स्पाइना

यह केवल nullsafe concering x है। Y के लिए यह दिए गए ऑब्जेक्ट के बराबर के कार्यान्वयन पर निर्भर करता है। (कार्यान्वयन है return (x == y) || (x != null && x.equals(y));)
ईएमआई-ले

23

अगर किसी संयोग से आपके पास जकार्ता कॉमन्स लाइब्रेरी की पहुँच है तो वहाँ ObjectUtils.equals () और बहुत सारे अन्य उपयोगी कार्य हैं।

संपादित करें: प्रारंभ में प्रश्न को गलत तरीके से लिखें


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.