Возможное исключение нулевого указателя в последовательности utils

Я использую свободное городское население StringUtils.isNotBlank (), чтобы проверить, не ли последовательность пуста и чиста. В некоторых сценариях для пустой строки или пустого указателя, поскольку контроля ввода не происходит как ожидалось. Пустой указатель или бланк проходят.

   if( StringUtils.isNotEmpty(obj.getvalue()) ){
        .............
    }

Когда я прохожу документация StringUtils Я нашел,

Побочный эффект пустой обработки состоит в том что NullPointerException должен считаться ошибкой в StringUtils (за исключением устаревшего методы).

Какую дозу это означает? У этого есть что-нибудь, чтобы сделать с моим сценарием?

2
Можно ли быть более конкретными? У вас есть какие-либо примеры кода?
добавлено автор Daniel, источник

5 ответы

Прочитайте предложение выше того, которое вы указали:

StringUtils обращается с пустыми входными строками спокойно. То есть это a пустой вход возвратит пустой указатель. Куда булево или международное возвращаются детали варьируются методом.

Побочный эффект пустой обработки состоит в том что NullPointerException должен считаться ошибкой в StringUtils (за исключением устаревшего методы).

Таким образом, так как это обращается с нулевыми значениями, это не должно бросать NullPointerExceptions.

И если вы проверите метод, isNotBlank , вы найдете этот стол:

 StringUtils.isNotBlank(null)      = false
 StringUtils.isNotBlank("")        = false
 StringUtils.isNotBlank(" ")       = false
 StringUtils.isNotBlank("bob")     = true
 StringUtils.isNotBlank("  bob  ") = true

если вы получаете другие ценности, вы действительно испытываете ошибку, о которой необходимо сообщить. Но более вероятно, что NPE вызывается чем-то еще. Возможно, некоторый другой метод StringUtils возвратил пустой указатель, например.

4
добавлено

В некоторых сценариях для пустой строки или пустого указателя, поскольку контроля ввода не происходит как ожидалось. Пустой указатель или бланк проходят.

Или в вашей логике проверки есть ошибка, или у вас есть данные, прибывающие из источника, который не был подвергнут проверке.

Если бы вы опубликовали фактический код и NPE stacktrace, мы могли бы помочь вам найти его.


Что это означает?

Это означает что, если StringUtils.isNotBlank() бросает NPE, то есть ошибка в методе. ("Побочный эффект", о котором говорит javadoc, , логичные побочный эффект; т.е. вторичное логическое следствие способа, которым определяется API.)

У этого есть что-нибудь, чтобы сделать с моим сценарием?

Это не имеет никакого отношения к нему..., если требование StringUtils.isNotBlank() не является </ими> бросок NPE.


ОБНОВЛЕНИЕ

Рассмотрение примера кода (щипнул в иллюстративных целях):

if (StringUtils.isNotEmpty(obj.getvalue())){
    String s = obj.getvalue();
    if (s == null) {
        System.err.println("Ooops!!");
    }
}

Я могу думать о многих сценариях, в которых этот код мог или дать NPE или вызвать "Ooops!" чтобы быть напечатанным. Например:

  1. , Если obj пустой указатель тогда, NPE будет определенно брошен. Это могло произойти, прежде чем вы звонили isNotEmpty , или (если ценность obj переменная может быть заменена, может быть изменен) в "тогда" блоке.

  2. Это возможен, что getValue метод мог бросить NPE.

  3. Это возможен (но вряд ли), что запрос getValue </у кода> есть побочный эффект, который заставляет его изменять государство obj и возвращать различную стоимость (например, пустой указатель ) на 2-м требовании. Ooops!

  4. Это возможен, что некоторая другая нить изменяет государство obj объект, в то время как текущий поток выполняет вышеупомянутый код. Ooops!

Большинство этих проблем могло быть "решено" следующим образом:

String s = obj.getvalue();
if (StringUtils.isNotEmpty(s)){//No NPE possible here now
    if (s == null) {
        System.err.println("Ooops!!"); //Cannot happen now.
    }
}
2
добавлено
Это не побочный эффект в этом смысле. Это - логический побочный эффект; т.е. логическое следствие способа, которым был разработан API.
добавлено автор Stephen C, источник
Я бегу в многопоточной окружающей среде. Мой сценарий происходит время от времени. Я интересуюсь побочным эффектом, который присутствует в документации StringUtils...
добавлено автор om39a, источник

Действительно ли возможно, что NPE брошен из obj.getvalue() , поскольку StringUtils.isNotBlank() никогда не будет бросать NPE. Если вы управляете своим кодом в многопоточной окружающей среде, можно сделать метод синхронизированным, таким образом, это предотвращает одновременный доступ к методу из многократных источников.

Для большего количества помощи можно ли послать ваш трассировка стека или кодовый блок ?

0
добавлено

Есть на самом деле жук любой в StringUtils.isNotBlank() метод или в документации. Если вы передадите пустой указатель , чтобы isNotBlank() , то это бросит NullPointerException , который противоречит документации. Таким образом один или другой (код или документация) неправильное.

Here's a good replacement using Guave from: http://www.javaworld.com/article/2074361/core-java/checking-for-null-or-empty-or-white-space-only-string-in-java.html

0
добавлено

Для подробно экспертизы вашей проблемы, вы могли отправить определенный пример, где код идет не так, как надо по вашему мнению.

Поведение StringUtils

  • StringUtils.isNotBlank (пустой указатель) возвращается ложный
  • StringUtils.isNotBlank ("") возвращается ложный
  • StringUtils.isNotBlank ("") возвращается ложный
  • StringUtils.isNotBlank (" testvalue") возвращается верный

Если поведение - что-либо еще, это - ошибка в libary

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async