Почему getPersonal() возвращает null в приведенном ниже случае?

Я работаю с InternetAddress в Java. Я использовал приведенный ниже фрагмент кода.

InternetAddress internetAddress = new InternetAddress("king<***@***.com>");
System.out.println(internetAddress.getPersonal());

В этом случае он возвращает короля в качестве вывода.

InternetAddress internetAddress = new InternetAddress(",<***@***.com>");
System.out.println(internetAddress.getPersonal());

В этом случае исключения нет, но возвращается null.

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

Спасибо.

Возможно, эта запятая интерпретируется как разделенный список отправителей, в функции parse() есть код специально для обработки запятых, но я не понял всю функцию, проверьте исходный код здесь: github.com/javaee/javamail/blob/master/mail/src/main/java/ja‌​vax/…

Zachary Craig 09.07.2019 15:40

Запятые используются для списков. См. rfc822

Johnny Mopp 09.07.2019 15:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по документации функции синтаксического анализа InternetAddress, в которой говорится, что параметр addressList интерпретируется как список адресных строк, разделенных запятыми, очень вероятно, что java видит это как два электронных письма, один недействительный (пустой) адрес и один без личного адреса.

Ваш вызов конструктора new InternetAddress("xyz") затем передается для прямого синтаксического анализа, как вы можете видеть здесь

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

Соответствующая документация: https://docs.oracle.com/javaee/6/api/javax/mail/internet/InternetAddress.html#parse

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

Bill Shannon 09.07.2019 19:51

Другие вопросы по теме