Optional उन methods के return type के तौर पर बनाया गया था जिनका जायज तौर पर कोई नतीजा न हो, ताकि caller अनुपस्थिति को नजरअंदाज न कर सके। यह fields, constructor parameters और method arguments के लिए ठीक नहीं बैठता, और इसे किसी collection पर नहीं लपेटना चाहिए, क्योंकि खाली list पहले ही कह देती है कि यहां कुछ नहीं है। बिना जांचे get कॉल करना पूरा मकसद ही मार देता है; map, filter, orElseGet या किसी सार्थक exception के साथ orElseThrow इस्तेमाल करें।
इंटरव्यूअर यह क्यों पूछते हैं
यह API डिजाइन का छोटा सा सवाल है जो बताता है कि आप nullability और पढ़ने लायक कोड के बारे में कैसे सोचते हैं। इंटरव्यूअर देखना चाहते हैं कि आपको पता है यह क्यों बना, कि यह serializable नहीं है और इसलिए entities या DTO fields में इसकी जगह नहीं है, और यह कि chaining ही इसे कीमती बनाती है। जो जवाब इसे null check का लपेटा भर मानते हैं, उनके साथ अक्सर ऐसा कोड आता है जो उस null से भी ज्यादा मुश्किल पढ़ने में होता है।
अपना जवाब कैसे स्ट्रक्चर करें
- इच्छित इस्तेमाल बताएं: संभावित अनुपस्थिति जताने वाला return type।
- वे जगहें गिनाएं जहां इसकी जगह नहीं है और क्यों।
- isPresent और get की जगह chaining वाला तरीका दिखाएं।
- खाली collection वाला नियम बताएं।
उदाहरण जवाब
यह इसलिए है ताकि method signature कह सके कि यह शायद कुछ न लौटाए, जो nullable return type कभी नहीं बता पाता था। तो repository जैसे lookups Optional लौटाते हैं और caller को उससे निपटना ही पड़ता है। गड़बड़ तब होती है जब लोग इसे हर जगह ठूंस देते हैं। field के तौर पर यह हर instance पर एक ऑब्जेक्ट जोड़ता है और serializable नहीं है, जो entities और payloads में सचमुच दिक्कतें खड़ी करता है। parameter के तौर पर यह callers को दो की जगह तीन हालतें सोचने को दे देता है, इसलिए मैं उसकी जगह overload लिखता हूं। और collection लौटाने वाला method खाली collection लौटाता है, कभी list का Optional नहीं, क्योंकि खाली होने का मतलब वही है। शैली के लिहाज से, अगर मैं isPresent लिखकर उसके बाद get लिखूं तो मैंने बस अतिरिक्त तामझाम के साथ null check ही लिखा है, इसलिए मैं chain करता हूं: जो चाहिए उस पर map, फिर filter, फिर एक domain exception के साथ orElseThrow जो बताए कि कौन सी id नहीं मिली। एक चीज मैं नहीं करूंगा, और वह है किसी मौजूदा codebase में इसे हर जगह null की जगह ठोक देना, क्योंकि मिली जुली शैली दोनों में से किसी भी एक तरीके से बुरी है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- orElse और orElseGet में क्या फर्क है?
- किसी बाहरी API से आने वाली nullable field को आप कैसे संभालेंगे?
- Optional streams के साथ कैसे मिलकर काम करता है?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें