В некоторых сценариях для пустой строки или нулевой проверки входных данных не происходит, как ожидалось. Нулевой или пустой пробегает.
Либо есть ошибка в вашей логике проверки, либо у вас есть данные, поступающие от источника, который не подвергался проверке.
Если вы разместили фактический код и стек NPE, мы могли бы помочь вам его найти.
Что это значит?
Это означает, что если StringUtils.isNotBlank()
выбрасывает NPE, возникает ошибка в методе. («Побочный эффект», что Javadoc говорит о является логической побочный эффект, т. Е вторичным логическим следствием так, что API определен)
Она имеет ничего общего с моим сценарий?
Это не имеет ничего общего с ним ... если вызов StringUtils.isNotBlank()
является не бросать NPE.
UPDATE
Учитывая ваш пример кода (переделаны для иллюстративных целей):
if (StringUtils.isNotEmpty(obj.getvalue())){
String s = obj.getvalue();
if (s == null) {
System.err.println("Ooops!!");
}
}
Я могу думать о ряде сценариев, в которых этот код может либо дать в NPE или причина "Ooops!" для печати. Например:
Если obj
является null
тогда NPE, безусловно, будет брошен. Это может произойти до того, как вы вызвали isNotEmpty
или (если значение переменной obj
можно изменить, можно изменить) в блоке «then».
Возможно, что метод getValue
может выбросить NPE.
Возможно (но маловероятно), что вызов getValue
имеет побочный эффект, который заставляет его изменить состояние obj
и возвращает другое значение (например, null
) на 2-й вызов. По электронной почте Ой!
Возможно, что какой-либо другой поток изменяет состояние объекта obj
, пока текущий поток выполняет вышеуказанный код. По электронной почте Ой!
Большинство из этих проблем может быть "фиксированной" следующим образом:
String s = obj.getvalue();
if (StringUtils.isNotEmpty(s)){ // No NPE possible here now
if (s == null) {
System.err.println("Ooops!!"); // Cannot happen now.
}
}
Можете ли вы быть более конкретным? У вас есть примеры кода? – Daniel