2016-01-07 3 views
7

Guava Preconditions नोट्स के लिए प्रलेखन:java.util.Objects.requireNonNull बनाम Preconditions.checkNotNull

परियोजनाओं जो का उपयोग com.google.common आम तौर पर Objects.requireNonNull(Object) के उपयोग से बचना चाहिए। इसके बजाय, checkNotNull(Object) या Verify.verifyNotNull(Object) का उपयोग करें जो भी स्थिति के लिए उपयुक्त है। (एक ही संदेश स्वीकार भार के लिए चला जाता है।)

कोई इस सुझाव के लिए तर्क की व्याख्या कर सकते हैं?

क्या यह स्थिरता के उद्देश्य के लिए है या Objects.requireNonNull के कार्यान्वयन के साथ कुछ मौलिक रूप से गलत है?

उत्तर

9

यह सिर्फ स्थिरता के लिए है। कार्यान्वयन एक ही हैं।

+0

स्रोत से सीधे उपयोग कर सकते हैं। धन्यवाद! – vpiTriumph

5

हालांकि सवाल में उदाहरण से ऐसा लगता है कि ओपी checkNotNull की विशेष रूप के बारे में विशेष रूप से पूछ रहा है, वहाँ checkNotNull जिसमें printf शैली प्रपत्र varargs देखा जा सकता है का उपयोग कर के पक्ष में सामान्य रूप में एक और अधिक सूक्ष्म अंतर है। Guava Preconditions का उपयोग कर उदाहरण के लिए आप निम्न कर सकते हैं:

public void getInput(String companyName) { 
    String context = "Google"; 
    String moreContext = "Facebook"; 
    checkNotNull(companyName, "Why not try %s or %s", context, moreContext); 
} 

Objects.requireNonNull साथ आप की तरह

public void getInput(String companyName) { 
    String context = "Google"; 
    String moreContext = "Facebook"; 
    checkNotNull(companyName, "Why not try " + context + " or " + moreContext); 
} 

संदर्भ कुछ करना होगा: Preconditions Explained

सरल के नीचे अनुभाग देखें, varargs "printf स्टाइल "अपवाद संदेश। (यह लाभ भी कारण है कि हम Objects.requireNonNull से अधिक checkNotNull का उपयोग जारी रखने की सलाह देते हैं JDK में शुरू की गई है 7.)

संपादित करें: हालांकि नोट करने के लिए एक बात है कि errorMessageTemplate करने के लिए सभी आर्ग स्ट्रिंग तो String.valueOf(arg) का उपयोग कर में बदल दिए जाते है आप केवल% s का उपयोग कर सकते हैं और अन्य प्रकार के विनिर्देशकों जैसे% d या% f आदि

+0

यह एक ठोस जोड़ है और जावा की 'आवश्यकता नॉटनुल' पर भी गुवा पूर्व शर्त चुनते समय पूरी तरह से विचार किया जाना चाहिए। – vpiTriumph

संबंधित मुद्दे