На самом деле, нет ничего плохого в том, чтобы иметь внутренние исключения, если они не являются частью вашего интерфейса. Это означает, однако, что
- либо исключение никогда не должно пересекать границы вашего модуля,
- или вы предоставляете исключение для публичной базы, которое пользователи вашего модуля могут отловить.
На самом деле, неплохо бы объявить тип исключения общедоступной базы для вашего модуля, чтобы ваши пользователи всегда могли положиться на него в своих предложениях catch
. Отдельные исключения, полученные из базового класса, могут быть публичными, если вы предпочитаете, но могут быть и не такими.
Обратите внимание, что вы абсолютно не должны полагаться на публичный / частный механизм для обеспечения любого вида безопасности, потому что его можно легко переопределить простым отражением.