2016-04-13 6 views
5

इस कोड को मेरे पास है:इंटेलिजे मुझे क्यों बता रहा है कि संदर्भ इस स्थिति में शून्य नहीं हो सकता है?

private void foo(Bar bar) { 
    Session session = null; 
    Class entityClazz = null; 
    try { 
     entityClazz = Hibernate.getClass(bar); 
     if (bar != null) { 

और इंटेलीजे संदेश के साथ ऊपर पिछले बयान के लिए मुझे चेतावनी देगा:

स्थिति 'बार = अशक्त!' हमेशा 'सही' है। यह निरीक्षण संभावित स्थितियों की रिपोर्ट करने के लिए विधि नियंत्रण और डेटा प्रवाह का विश्लेषण करता है जो हमेशा सत्य या झूठे होते हैं, अभिव्यक्ति जिसका मूल्य स्थिर रूप से स्थिर होता है, और ऐसी परिस्थितियां जो शून्यता अनुबंध उल्लंघन का कारण बन सकती हैं।

जब मैं बयान को हटा दें:

entityClazz = Hibernate.getClass(bar); 

चेतावनी चला जाएगा।

इंटेलिजे के दिमाग में क्या चल रहा है, बार से शून्य क्या रोक रहा है?

+3

मुझे लगता है, क्योंकि 'Hibernate.getClass (बार)' एक NullPointerException फेंक देते हैं और यदि 'bar' अशक्त और इस प्रकार' यदि है उस मामले में कभी नहीं पहुंचाया जाएगा। –

+0

@a_horse_with_no_name मुझे कोड में फेंकने वाले किसी भी एनपीई को नहीं देखा गया था, लेकिन शायद मुझे यह याद आया .. –

+0

जांचें कि 'Hibernate.getClass' के पास इसके पैरामीटर पर '@ NotNull' है या नहीं। –

उत्तर

3

हाइबरनेट दस्तावेज के अनुसार, यह org.hibernate में getClass() विधि है। हाइबरनेट क्लास करता है।

public static Class getClass(Object proxy) { 
     if (proxy instanceof HibernateProxy) { 
      return ((HibernateProxy) proxy).getHibernateLazyInitializer() 
        .getImplementation() 
        .getClass(); 
     } 
     else { 
      return proxy.getClass(); 
     } 
    } 

प्रलेखन HibernateException के अनुसार एक अशक्त पैरामीटर, जो NestableRuntimeException भी एक RuntimeException की एक विस्तारित वर्ग है के मामले में फेंक दिया है।

Intellij यह आसानी से पाया जाता है कि loc

entityClazz = Hibernate.getClass(bar); 

एक एनपीई फेंक इस विश्लेषण करने के लिए, अपने कोड का उपयोग कर निरीक्षण में सक्षम है। यदि यह एनपीई फेंकता है, तो अगर कंडीशन स्टेटमेंट कभी नहीं पहुंचता है, क्योंकि NestableRuntimeException अनचेक अपवाद हैं।

आप Hibernate.getClass (बार) से ऊपर की स्थिति को रख सकते हैं जो एक शून्य सुरक्षित विधि के लिए आदर्श होगा।

आशा है कि यह साफ़ हो जाए।

संदर्भ

Hibernate Documentation

Code Analysis - Intellij

Code Inspection - Intellij

+0

आपको कहां मिला 'दस्तावेज के अनुसार HibernateException को शून्य पैरामीटर के मामले में फेंक दिया गया है'? –

+0

ठीक है, कोई दस्तावेज नहीं कहता कि यह एनपीई की वजह से है। Javadocs का संदर्भ लें लेकिन org.hibernate.proxy में प्रारंभिक() विधि को जांचें .AbstractLazyInitializer क्लास – aksappy

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

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