Мне интересно, должен ли я защищаться от возвращаемого значения вызова метода, проверяя, соответствуют ли они моим ожиданиям, даже если я знаю, что метод, который я вызываю, будет соответствовать этим ожиданиям.
ДАННЫЙ
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
Я ДОЛЖЕН ДЕЛАТЬ
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
ИЛИ
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
Я спрашиваю об этом на концептуальном уровне. Если я знаю внутреннюю работу метода, который я вызываю. Либо потому что я это написал, либо я его осмотрел. И логика возможных значений, которые он возвращает, отвечает моим предварительным условиям. Является ли «лучше» или «более подходящим» пропустить проверку, или мне все равно следует защищаться от неправильных значений, прежде чем продолжить с методом, который я сейчас реализую, даже если он всегда должен проходить.
Мой вывод из всех ответов (смело приходите к своим):
Утверждать когда- Метод показал себя плохо в прошлом
- Метод из ненадежного источника
- Этот метод используется из других мест и явно не указывает его постусловия
- Метод живет близко к вашему (подробности см. В выбранном ответе)
- Метод явно определяет его контракт с чем-то вроде надлежащего документа, безопасности типа, модульного теста или проверки после условия
- Производительность имеет решающее значение (в этом случае утверждение режима отладки может работать как гибридный подход)
Null
)? Вероятно, одинаково проблематично, если имя ""
(не ноль, а пустая строка) или "N/A"
. Либо вы можете доверять результату, либо вы должны быть соответственно параноиком.