Есть методы для поиска/получения 'нечто' и есть 2 основных разновидности поведения в случае, если результат не найден (или не может быть получен):
- вернуть null или пустую коллекцию
- толкнуть исключение (например ItemNotFoud)
Впервые на эту разницу обратил внимание в ORM framework-ах. Ка правило, если это метод getXXX, то он либо возвращает результат либо толкает исключение, а если это findXXX, то он возвращает результат либо пустое значение (null или пустую коллекцию).
т.е. имеем 2 сигнатуры:
/** * @return not nullable result */ Item getItem() throws ItemNotFound; /** * @return result or null */ Item findItem();Все выглядит логично и понять что "выдает" метод несложно и без комментариев.
Но, к сожалению, на практике иногда приходится сталкиваться вот с таким:
/** * @return result or null */ Item findItem() throws ItemNotFound; //Забавная задачка 'предугадай поведение' :)
Кстати, для более 'безопасной' реализации find методов имеет смысл воспользоваться шаблоном 'NullObject' - с учетом того, что народ читать комментарии (а тем более писать их) не любит, число NullPointerException и конструкций 'if(null != )' может сократиться на порядок.
Комментариев нет:
Отправить комментарий