2016-04-13 14 views
5

Bu aldığım kodudur:Neden IntelliJ bana bu referansın null değerinin olamayacağını söyler?

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

Ve IntelliJ mesajla yukarıda geçen ifadeleri destekliyor uyarır:

Koşul 'bar = null!' 'Gerçek' zaman. Bu denetim , her zaman doğru veya yanlış olası koşullarını raporlamak için yöntem kontrolü ve veri akışını analiz eder ve değerleri statik olarak sabit olduğu kanıtlanmış ifadeler ve null sözleşme ihlallerine yol açabilecek durumları ifade eder.

Ben ifadeyi silmek

: uyarı gitmiş olacak

entityClazz = Hibernate.getClass(bar); 

.

Burada IntelliJ'in aklında neler oluyor, bardan nelerin durduğu nerededir?

+3

sanırım Bu durumda asla ulaşılamayacak. –

+0

@a_horse_with_no_name Kodu atmış herhangi bir NPE görmedim ama belki de onu özledim .. –

+0

'Hibernate.getClass' parametresinde' @ NotNull' olup olmadığını kontrol edin. –

cevap

3

Hazırda kalan belgelere göre, org.hibernate.Hibernate sınıfında getClass() yöntemi budur. belgelerinde HibernateException uyarınca

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

da NestableRuntimeException bir RuntimeException uzun bir sınıf boş bir parametre, söz konusu atılır.

Intellij kolayca loc

entityClazz = Hibernate.getClass(bar); 

bir NPE atmak olacağını bulunursa onun denetimlerini kullanarak, bu analiz edebiliyor. Bir NPE atarsa, NestableRuntimeException denetlenmeyen istisnalar olduğu gibi koşul bildirimine hiçbir zaman ulaşılmaz.

Sıfır koşulunu, güvenli bir yöntem için ideal olan Hibernate.getClass (bar) üzerine yerleştirebilirsiniz.

Bu temizliği umarız. bar` böylece `eğer geçersiz ve olduğunu` eğer Hibernate.getClass (bar) `Bir NullPointerException atacağım` çünkü

Kaynaklar

Hibernate Documentation

Code Analysis - Intellij

Code Inspection - Intellij

+0

'Bulunduğunuz belgede' null parametresi durumunda HibernateException atılıyor '? –

+0

Eh, hiçbir belge bunun NPE nedeniyle olduğunu söylemez. Javadocs'a bakın, org.hibernate.proxy.AbstractLazyInitializer sınıfındaki initialize() yöntemini kontrol edin. – aksappy

İlgili konular