Я работаю над проектом для анализа текста. Я анализирую определенный текст и сохраняю его в массиве. Я написал для него класс. Если я получаю неправильный текст, поэтому я не могу найти то, что хочу в данном вводе. Какова наилучшая практика, я должен вернуть пустой массив и позволить вызывающему классу обрабатывать его или я должен поднять настраиваемое исключение для вызывающего класса.Пользовательские исключения или пустой список
ответ
Если бы я использовал ваш класс в качестве библиотеки и получил пустой массив в качестве возвращаемого значения, я бы предположил, что в противном случае запрещена документация - ничего не было прочитано (и очень смутно, если бы у моего ввода был текст для чтения!)
Точно так же я надеюсь, что когда и если фрагмент кода библиотеки забросит исключение, он бросит что-то полезное, чтобы я мог отладить проблему. Это может происходить в форме пользовательского исключения или может возникнуть в виде существующего исключения библиотеки; например, ParseException
, который поставляет смещение в текст, в котором произошло исключение. Однако, если есть какая-то другая информация, относящаяся к вашему конкретному исключительному случаю, тогда может потребоваться подзаголовок Exception
.
Если вызывающий объект имеет вид empty-list
, это ошибка, то есть вызывающий объект всегда, за исключением некоторого значения в списке, а обработка пустого списка в его случае не является обычным, это сигнал о том, что пользовательское исключение лучше.
Для Например: Если абонент имеет category
вход и договор ваш API будет иметь product
, пустота есть ошибка в соответствии с договором.
Теперь, если не существует прецедента с жестким контрактом между абонентом и API, это совершенно верно для отправки пустого списка.
Для пример: Абонент запрашивает список статей XYZ, а у вас его нет, список пустой статьи в порядке.
Это чисто субъективный и случайный привод, Java
не содержит никаких конкретных рекомендаций по этому вопросу.
Трудно иметь «лучшие практики», так как каждый дизайн случае отличается. Как правило, рассмотрите, какой API будет проще всего использовать для вашего потребителя, и это будет наименее удивительным. Я также настоятельно рекомендую собрать копию Effective Java Джошуа Блоха, если вы ее еще не видели. В частности, применимы разделы «Использовать исключения для исключительных условий» и «Использовать встроенные исключения» (и книга содержит множество других хороших предложений о стиле и правильности).
Теперь ваш конкретный случай:
ли он ожидать, что ваш пользователь должен обеспечить надлежащий текст или ненадлежащее текст в качестве входных данных? Если первое, то исключение скорее правильное решение. Кроме того, если вы вернули пустой массив, какая разница между правильным текстом, который бывает пустым, и неправильным текстом? Не могли бы вы рассказать о разнице в коде вызова? Разве такое различие имеет значение?
Теперь какое исключение бросить? Вы можете бросить подкласс IOException (поскольку вы имеете дело с вводом), потенциальным недостатком является то, что IOException не является RuntimeException, поэтому любой, вызывающий ваш код, будет вынужден обрабатывать исключение или реконструировать его. (Проверенные или исключенные исключения - еще одна дискуссия).
Это зависит от того, что вы делаете.Если неправильный текст является общей и ожидаемой вещью, просто игнорировать его и возвращать пустой массив (или null) может быть вполне разумным. Но если неправильный текст никогда не должен происходить и ставит под сомнение обоснованность ранее или впоследствии обработанного ввода (который уже может быть добавлен в массив), вы должны, вероятно, выбросить исключение.
- 1. ApplicationException или создавать пользовательские исключения?
- 2. Пользовательские исключения
- 3. Пользовательские исключения для исключения NewCommandEvent
- 4. Пользовательские непроверенные исключения
- 5. Пользовательские исключения в Clojure?
- 6. заводных пустого список исключения
- 7. пользовательские исключения не поймали
- 8. Пользовательские исключения в CodeIgniter
- 9. Инспектирующие пользовательские исключения
- 10. Создать пользовательские исключения?
- 11. Поймайте пользовательские исключения C++
- 12. Когда использовать пользовательские исключения
- 13. Пользовательские исключения Sql Server
- 14. Пользовательские исключения в scala
- 15. Пользовательские исключения RunTime
- 16. Зачем создавать пользовательские исключения?
- 17. Java Пользовательские исключения
- 18. Пользовательские исключения в C++
- 19. C++ пользовательские исключения
- 20. Python, отличающий пользовательские исключения
- 21. Пользовательские исключения со свойствами
- 22. Пользовательские исключения String Array
- 23. Пользовательские исключения PostgreSQL?
- 24. Python пустой список исключений
- 25. Исключения - Пользовательские исключения на каждый слое
- 26. Список запросов в спящем режиме: пустой или пустой?
- 27. Пользовательские исключения с гуавы предусловий
- 28. Соглашение Haskell: Может быть, или пустой список?
- 29. python: нет выхода или только пустой список
- 30. Directory.GetFiles или DirectoryInfo.GetFiles возвращает пустой список