java जावा: ऑब्जेक्ट शून्य होने पर कैसे जांचें?




android (7)

मैं एक एप्लीकेशन बना रहा हूं जो वेब से छवियों को पुनर्प्राप्त करता है। यदि छवि को पुनर्प्राप्त नहीं किया जा सकता है तो एक और स्थानीय छवि का उपयोग किया जाना चाहिए।

निम्नलिखित पंक्तियों को निष्पादित करने का प्रयास करते समय:

Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable.equals(null)) {
  drawable = getRandomDrawable();
}

रेखा अगर (drawable.equals (शून्य)) खींचने योग्य है तो अपवाद फेंकता है।

क्या किसी को पता है कि ड्रॉबल के मूल्य को कैसे चेक किया जाना चाहिए ताकि अपवाद फेंकने और स्थानीय छवि को पुनर्प्राप्त करने के लिए अपवाद न फेंक दिया जा सके (ड्रॉ करने योग्य = getRandomDrawable () निष्पादित करें?


मैं इस दृष्टिकोण का उपयोग करता हूं:

if (null == drawable) {
  //do stuff
} else {
  //other things
}

इस तरह से मुझे लाइन की पठनीयता में सुधार होता है - जैसा कि मैंने एक स्रोत फ़ाइल के माध्यम से जल्दी से पढ़ा है, मैं देख सकता हूं कि यह एक शून्य जांच है।

इस बात के संबंध में कि आप किसी ऑब्जेक्ट पर .equals() को कॉल क्यों नहीं कर सकते हैं जो null हो सकता है; यदि आपके पास ऑब्जेक्ट संदर्भ है (अर्थात् 'ड्रॉइंग') वास्तव में null , तो यह ढेर पर किसी ऑब्जेक्ट को इंगित नहीं करता है। इसका मतलब है कि ढेर पर कोई ऑब्जेक्ट नहीं है जिस पर कॉल equals() सफल हो सकता है।

शुभकामनाएँ!


if (drawable == null) {
  ...
}

equals() विधि मूल्य समानता के लिए जांचती है, जिसका अर्थ है कि यह दो वस्तुओं की सामग्री की तुलना करता है। चूंकि null एक वस्तु नहीं है, इसलिए यह आपकी ऑब्जेक्ट की सामग्री को null की सामग्री से तुलना करने की कोशिश करते समय क्रैश हो जाता है।

== ऑपरेटर संदर्भ समानता के लिए जांच करता है, जिसका अर्थ यह है कि यह दिखता है कि क्या दो वस्तुएं वास्तव में एक ही वस्तु हैं । वस्तुओं को वास्तव में अस्तित्व में रखने की आवश्यकता नहीं है; दो nonxistent वस्तुओं ( null संदर्भ) भी बराबर हैं।


if (yourObject instanceof yourClassName) false मूल्यांकन करेगा यदि yourObject null


drawable.equals(null)

उपर्युक्त रेखा ड्रॉबल ऑब्जेक्ट पर "बराबर (...)" विधि को कॉल करती है।

इसलिए, जब खींचने योग्य शून्य नहीं होता है और यह एक वास्तविक वस्तु है, तो सभी "बराबर (शून्य)" विधि को कॉल करने के रूप में अच्छी तरह से चला जाता है "झूठी"

लेकिन जब "खींचने योग्य" शून्य होता है, तो इसका मतलब है कि "ऑब्जेक्ट्स (...)" विधि को शून्य ऑब्जेक्ट पर कॉल करना, इसका मतलब है किसी ऑब्जेक्ट पर एक विधि को कॉल करना जो अस्तित्व में नहीं है, इसलिए यह "NullPointerException" फेंकता है

यह जांचने के लिए कि कोई वस्तु मौजूद है या नहीं, यह शून्य नहीं है, निम्न का उपयोग करें

if(drawable == null) {
    ...
    ...
}

उपर्युक्त स्थिति में, हम जांच कर रहे हैं कि संदर्भ चर "खींचने योग्य" शून्य है या इसमें कुछ मूल्य (इसकी वस्तु का संदर्भ) शामिल है, इसलिए यदि ड्रॉइंग चेकिंग के रूप में शून्य है तो अपवाद नहीं फेंक देगा

null == null

यह सही है।


Is -null-check (deamon's update) को संभालने के लिए Google guava libs का उपयोग करें

Drawable drawable = Optional.of(Common.getDrawableFromUrl(this, product.getMapPath())).or(getRandomDrawable());

संपादित जावा 8 समाधान:

final Drawable drawable = 
    Optional.ofNullable(Common.getDrawableFromUrl(this, product.getMapPath()))
        .orElseGet(() -> getRandomDrawable());

आप इस मामले में drawable final घोषित कर सकते हैं।

चूंकि चास्मो ने बताया, एंड्रॉइड इस समय जावा 8 का समर्थन नहीं करता है। तो यह समाधान अन्य संदर्भों में केवल संभव है।


DIY

private boolean isNull(Object obj) {
    return obj == null;
}
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (isNull(drawable)) {
    drawable = getRandomDrawable();
}




android