Сегодня я столкнулся со следующей ситуацией: ("псевдокод")
class MyClass {
public void workOnArray(Object[] data) {
for (Object item : data) {
workOnItem(item);
}
}
public void workOnItem(Object item) {
if (item == null) throw new NullPointerException();
}
}
Теперь, если вызывающий вызов вызывает workOnArray
с массивом, содержащим null
элементов, вызывающий получит NullPointerException
из-за workOnItem
.
Но я мог бы добавить дополнительную проверку в workOnArray
, другими словами, проблема может быть обнаружена раньше.
(Обратите вниманиечто это тривиальный пример, в реальном приложении это может быть гораздо менее очевидно).
Что касается профессионалов, я бы сказал, что дополнительная проверка может предоставить более подробную диагностическую информацию.Также неудача на ранней стадии - это всегда хорошо.
С другой стороны, я бы спросила себя: «Если я это сделаю, разве мне не нужно проверять каждый параметр, передаваемый в основной API моего языка программирования, ивыбросить точно такие же исключения? "
Есть ли какое-то эмпирическое правило, когда выкидывать исключения рано, а когда просто позволить вызываемому объекту бросить его?