tespit edemez aşağıdaki adres kod parçası:NullPointerException ben
List<SomeObject> allObjects = getNotNullCollection(SomeObject.class, getExpression());
Enumeration2Child mightBeNull = getEnumeration2();
try {
for (SomeObject someObject : allObjects) {
if (someObject == null) {
LOGGER.warn("Null Object " + getId() + " expression : " + getExpression().toString());
StringBuilder errorMsg = new StringBuilder();
for (Object element : allObjects) {
errorMsg.append(element != null ? element.toString() : "Null").append(" - ");
}
LOGGER.warn("allObjects: ", errorMsg.toString());
return false;
}
if (someObject.getValue() != null && someObject.getValue().equals(Enumeration1.VALUE) && !(Enumeration2.VALUE2.equals(mightBeNull) || Enumeration2.VALUE3.equals(mightBeNull))) {
return false;
}
}
} catch (NullPointerException e) {
}
Ve bir NPE hattında orada atılır: someObject boş olup olmadığını kontrol yukarıdaki i de, görebileceğiniz gibi
if (someObject.getValue() != null && someObject.getValue().equals(Enumeration1.VALUE) && !(Enumeration2.VALUE2.equals(mightBeNull) || Enumeration2.VALUE3.equals(mightBeNull)))
someObject.getValue() öğesinin boş olup olmadığını kontrol et, bu yüzden bu bölümde güvenli olmalıyım. Ve geri kalan ifadelerin geri kalanı sadece eşittir çağrılarıdır (ve sonra eşittir yönteminde NPE alacağımı varsayalım ve eğer ifadede değil). Başka neyim olsun burada özlüyorum? Teşekkür ederiz
DÜZENLEME: Merhaba, sorunu çözmek için bize bilgi vermek. Gerçekten haklıydın, çok önemli bir bilgi fark etmedim ama başlangıçta araştırmak zordu. Ek kayıt ekledim ve aynı kodu çalıştıran 3 iş parçacığı olduğunu öğrendim. Şimdi, bu bir sorun olmayacak, ancak allObjects döndüren DB önbelleğe alma getExpression() uygulamasının uygulanmasıyla, bu iş parçacıkları arasında paylaşıldı. Biri bu parçadaki boş değerlere karşı denetlerken: ( 'if (someObject.getValue()! = Null & & someObject.getValue().' ilk onay döndü değil Null ve sonra başka bir iş parçacığı silindi, dolayısıyla NPE oldu someObject.getValue() tarafından atılan. Yani temelde
Tanımlamak için bize yeterince bilgi verdiğinizi düşünmüyorum ya. Bunu okudun mu? http://stackoverflow.com/q/218384/3973077 –
Ayrıca 'Enumeration1.VALUE' veya 'mightBeNull' ** kontrol edebilirsiniz ** null nedir? –
En azından çağrı grubunu dahil etmelisiniz. – Reinard