java - कैसे विधि जंजीर में अशक्त मूल्यों की जाँच से बचने के लिए?




exception-handling nullpointerexception (4)

इस सवाल का पहले से ही यहाँ एक जवाब है:

मुझे यह जांचने की आवश्यकता है कि कुछ मूल्य शून्य है या नहीं। और अगर इसकी अशक्त नहीं है, तो बस कुछ चर को सही पर सेट करें। यहां कोई और वक्तव्य नहीं है। मुझे इस तरह की कई हालत जांचने को मिली।

क्या सभी विधि रिटर्न मानों की जांच किए बिना इस शून्य जांच को संभालने का कोई तरीका है?

if(country != null && country.getCity() != null && country.getCity().getSchool() != null && country.getCity().getSchool().getStudent() != null .....) {
    isValid = true;
}

मैंने सोचा कि सीधे चर की जाँच करें और NullpointerException को अनदेखा करें। क्या यह अच्छा अभ्यास है?

try{
    if(country.getCity().getSchool().getStudent().getInfo().... != null)
} catch(NullPointerException ex){
    //dont do anything.
}

आप vavr के विकल्प को भी देख सकते हैं जो नीचे दिए गए पदों के अनुसार जावा के वैकल्पिक से बेहतर है और इसमें बहुत समृद्ध एपीआई है

https://softwaremill.com/do-we-have-better-option-here/


आप यहां Optional का उपयोग कर सकते हैं, लेकिन यह प्रत्येक चरण में एक वैकल्पिक वस्तु बनाता है।

boolean isValid = Optional.ofNullable(country)
    .map(country -> country.getCity()) //Or use method reference Country::getCity
    .map(city -> city.getSchool())
    .map(school -> school.getStudent())
    .map(student -> true)
    .orElse(false);

//OR
boolean isValid = Optional.ofNullable(country)
                      .map(..)
                      ....
                      .isPresent();

जावा में "नल-सुरक्षित" ऑपरेशन नहीं है, उदाहरण के लिए, कोटलिन की अशक्त सुरक्षा

आप या तो यह कर सकते हैं:

  • एनपीई को पकड़ें और इसे अनदेखा करें
  • सभी संदर्भों को मैन्युअल रूप से जांचें
  • अन्य उत्तरों के अनुसार वैकल्पिक का उपयोग करें
  • XLST जैसे किसी प्रकार के टूलिंग का उपयोग करें

अन्यथा यदि आपके पास डोमेन ऑब्जेक्ट्स पर नियंत्रण है, तो आप अपनी कक्षाओं को फिर से डिज़ाइन कर सकते हैं, ताकि आपको आवश्यक जानकारी शीर्ष स्तर की वस्तु से उपलब्ध हो ( Country कक्षा सभी अशक्त जाँच करें ...)


नहीं, यह आमतौर पर जावा में आपके संदर्भों की जांच करने के बजाय एनपीई को पकड़ने के लिए अच्छा अभ्यास नहीं है।

यदि आप चाहें तो आप इस तरह की चीज़ों के लिए Optional उपयोग कर सकते हैं:

if (Optional.ofNullable(country)
            .map(Country::getCity)
            .map(City::getSchool)
            .map(School::getStudent)
            .isPresent()) {
    isValid = true;
}

या केवल

boolean isValid = Optional.ofNullable(country)
                          .map(Country::getCity)
                          .map(City::getSchool)
                          .map(School::getStudent)
                          .isPresent();

यदि वह सब है जो कि isValid है तो जाँच की जानी चाहिए।







nullpointerexception