हमने FindBugs का उपयोग करना शुरू कर दिया है और हमारे मापदंडों को @Nonnull
उचित रूप से एनोटेट कर रहे हैं , और यह चक्र में कीड़े को इंगित करने के लिए बहुत अच्छा काम करता है। अब तक हमने null
अमरूद का उपयोग करने के लिए इन तर्कों की जाँच जारी रखी है checkNotNull
, लेकिन मैं null
केवल किनारों - स्थानों पर जाँच करना पसंद करूँगा जहाँ मूल्य की जाँच किए बिना आ सकता है null
, उदाहरण के लिए, एक SOAP अनुरोध।
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
मैं समझता हूं कि अपने आप मूल्यों को @Nonnull
अवरुद्ध नहीं करता null
है।
हालांकि, यह देखते हुए कि फाइंडबग्स कहीं भी इंगित करेगा कि एक मान चिह्न को एक चिह्नित फ़ील्ड से एक में स्थानांतरित किया जाता है @Nonnull
, क्या हम इन मामलों को पकड़ने के लिए इस पर निर्भर नहीं कर सकते (जो ऐसा करता है) इन मूल्यों की जांच किए बिना null
हर जगह वे चारों ओर से गुजरते हैं। प्रणाली? क्या मैं उपकरण पर भरोसा करना चाहता हूं और इन क्रिया जांचों से बचना चाहता हूं?
नीचे की रेखा: जबकि null
नीचे दिए गए दूसरे चेक को निकालना सुरक्षित लगता है , क्या यह बुरा अभ्यास है?
यह प्रश्न संभवत: शून्य के लिए एक चेक के समान है यदि वह अशक्त होने की उम्मीद नहीं करता है , लेकिन मैं @Nonnull
एनोटेशन के संबंध में विशेष रूप से पूछ रहा हूं ।
@Nonnull
: एक अनुबंध विनिर्देश के रूप में। मैं अनुबंध के पीछे रक्षात्मक जांचों को हटा रहा हूं और अब तक कोई परेशानी नहीं हुई है।