Ваши случаи - это две разные ситуации, которые хорошо отображаются в реальном мире:
1) Учитывая, что у нас есть класс Interval с методом overlaps (Interval), что должно произойти, если передан нолькак параметр?У меня такое чувство, что мы должны выбросить исключение IllegalArgumentException, чтобы вызывающий абонент узнал, что, возможно, что-то не так, но мой коллега считает, что возвращать false достаточно ...
Передача null
здесь - это все равно, что спрашивать«В чем разница между уткой?», На которую вы не можете ответить, потому что отсутствует информация.Вы не можете сказать «нет никакой разницы», потому что вы понятия не имеете, является ли недостающая информация другой уткой (без разницы) или водяным буйволом (большая разница).Если в контракте предусмотрено, что вызывающий абонент должен предоставить что-то для сравнения, и вызывающий абонент не выполнил свою окончательную сделку, это хорошая причина, как и любая, для исключения.
2)При наличии такого метода, как fetchByIds (идентификаторы коллекций), что должно произойти, если будет предоставлена пустая коллекция?
Это похоже на то, что ваша жена говорит вам взять список покупок из холодильника и забрать все наЭто.Если в списке ничего нет (пустая коллекция), вы приходите домой ни с чем и делаете именно то, о чем вас просили.Если вы идете к холодильнику и не находите список покупок (null
), вы поднимаете исключение, сообщая своей жене, что там нет списка покупок, и она может решить, действительно ли она хотела сказать вам, что он был на кухонном столе.или забыть все это.
Должен ли метод гарантировать только то, что он не сломается до тех пор, пока выполняются предварительные условия, или он должен также попытаться определить потенциальные вызовы с ошибками?
Как уже говорили другие, метод должен гарантировать, что он будет себя вести, однако в документации сказано, что он будет себя вести.Если в контракте говорится, что метод вернет определенный результат при наличии аргумента null
, то вызывающий объект должен убедиться, что он знает, что он передает null
, и сможет обработать результаты.
Как должна вести себя программа при наличии правдоподобных, но подозрительных данных, зависит от многих вещей, например, от того, насколько важно для нее продолжать функционирование, или от того, будет ли продолжение обработки данных такого рода, будет пагубно влиять на что-либоостальное.Это решение для вас, разработчика, должно приниматься в каждом конкретном случае на основе вашего суждения.Любой, кто намеревается знать, что это должно быть всегда одним способом в любых обстоятельствах, не изучил проблему достаточно внимательно.
В тех случаях, когда вы решаете не генерировать исключение (например, возвращая false
для * 1028)*), у вас всегда есть возможность зарегистрировать тот факт, что вы увидели что-то сомнительное вместе с любой другой имеющейся у вас информацией (трассировка стека и т. д.).Это дает вам возможность работать с ним вне диапазона, чтобы программа продолжала функционировать.