2013-12-26 2 views
0

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

ответ

2

Если бы я использовал ваш класс в качестве библиотеки и получил пустой массив в качестве возвращаемого значения, я бы предположил, что в противном случае запрещена документация - ничего не было прочитано (и очень смутно, если бы у моего ввода был текст для чтения!)

Точно так же я надеюсь, что когда и если фрагмент кода библиотеки забросит исключение, он бросит что-то полезное, чтобы я мог отладить проблему. Это может происходить в форме пользовательского исключения или может возникнуть в виде существующего исключения библиотеки; например, ParseException, который поставляет смещение в текст, в котором произошло исключение. Однако, если есть какая-то другая информация, относящаяся к вашему конкретному исключительному случаю, тогда может потребоваться подзаголовок Exception.

1

Если вызывающий объект имеет вид empty-list, это ошибка, то есть вызывающий объект всегда, за исключением некоторого значения в списке, а обработка пустого списка в его случае не является обычным, это сигнал о том, что пользовательское исключение лучше.

Для Например: Если абонент имеет category вход и договор ваш API будет иметь product, пустота есть ошибка в соответствии с договором.

Теперь, если не существует прецедента с жестким контрактом между абонентом и API, это совершенно верно для отправки пустого списка.

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

Это чисто субъективный и случайный привод, Java не содержит никаких конкретных рекомендаций по этому вопросу.

1

Трудно иметь «лучшие практики», так как каждый дизайн случае отличается. Как правило, рассмотрите, какой API будет проще всего использовать для вашего потребителя, и это будет наименее удивительным. Я также настоятельно рекомендую собрать копию Effective Java Джошуа Блоха, если вы ее еще не видели. В частности, применимы разделы «Использовать исключения для исключительных условий» и «Использовать встроенные исключения» (и книга содержит множество других хороших предложений о стиле и правильности).

Теперь ваш конкретный случай:

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

Теперь какое исключение бросить? Вы можете бросить подкласс IOException (поскольку вы имеете дело с вводом), потенциальным недостатком является то, что IOException не является RuntimeException, поэтому любой, вызывающий ваш код, будет вынужден обрабатывать исключение или реконструировать его. (Проверенные или исключенные исключения - еще одна дискуссия).

1

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

Смежные вопросы