Передача null в функцию NumberUtils.createLong, генерирующую исключение - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь преобразовать String в Long с помощью функции NumberUtils.createLong.

Как упомянуто в Do c, если мы передадим нулевое значение, то он вернет нулевое значение. Но тем не менее я получаю NumberFormatException для входной строки "null". Ниже приведен фрагмент кода, который я использую для вызова функции createLong.

NumberUtils.createLong("null") and
NumberUtils.createLong(null)

Пожалуйста, помогите мне исправить это исключение.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 21 января 2020

Документация гласит

Возвращает null, если строка null

Вы не передаете ее null, вы передаете ее "null". Это совершенно другая вещь.

String s = "null";
System.out.println(s == null);   // false
System.out.println(s.length());  // 4

String t = null;
System.out.println(t == null);   // true
System.out.println(t.length());  // NullPointerException.
0 голосов
/ 21 января 2020
NumberUtils.createLong("null")

Сбой, потому что "null" не похож на число, как "0".

NumberUtils.createLong(null)

Если не удастся, дизайнер API попросил вас принять собственное решение о том, как обращаться с нулевыми значениями. Это хорошее решение, так как неявные предположения о нулевых значениях имеют тенденцию вызывать много проблем и трудностей в поиске ошибок.

Примите собственное решение, например:

final Long x;
if (numberAsString == null)
  x = 0; // or null, although I'd see this as bad style.
else
  x = NumberUtil.createLong(numberAsString);

Этот пример делает не относится к сценарию numberAsString, содержащему текст, не похожий на фактическое длинное значение.

0 голосов
/ 21 января 2020

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

...