हमने 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: एक अनुबंध विनिर्देश के रूप में। मैं अनुबंध के पीछे रक्षात्मक जांचों को हटा रहा हूं और अब तक कोई परेशानी नहीं हुई है।