Вы не можете гарантировать это только с помощью интерфейсов, без поведения там.
Я согласен с философией защитного программирования в Framework, помогаю разработчикам избежать ошибок.
Вы можете поставить заводской объект:
public class MyPoliceman {
public IContribution makeContributor( IMyStuff stuffer, IHelper helper)
throws BadAssociatesException {
// check validity of stuffer and helper here, throw exceptions if null
}
}
Тогда, по крайней мере, мы можем проверить наличие нулей и т. Д.
С некоторыми мыслями обычно можно оказать помощь разработчикам. В некоторых случаях лучшее, что вы можете сделать, - это перехватывать сообщения об ошибках и тщательно сообщать о них. Например, здесь, на ваш завод может быть передан прекрасный IHelper, но последующие действия над классом могут сделать его неспособным. (Например, изображение это был Файл, и побочный эффект позже закрыл файл.) Тогда все, что вы можете сделать, это перехватить результирующее состояние ошибки, записать ошибку где-нибудь и (вероятно) вызвать исключение. Тогда, по крайней мере, разработчик имеет представление о том, что нужно исправить.