Шаблон, описанный Andreas_D, определенно полезен, когда вы обрабатываете, скажем, серверную компиляцию предоставленного пользователем файла и хотите сообщить об ошибках.
Например, у вас может быть исключение CompilationException, которое генерируется, если не удается скомпилировать ресурс. Компиляция может означать любое количество вещей. Например, вы можете оценить текст внутри файла, который загружает конечный пользователь, проанализировать токены, проверить наличие синтаксических ошибок и определить, является ли файл допустимым. В конце концов, эта вещь либо действительна, либо недействительна, и вы хотите вернуть надлежащее исключение CompilationException для распространения обратно в стек вызовов.
Как описывает Андреас, у вас может быть метод add (), который позволяет вам добавлять проблемы компиляции в ваше исключение. Эти проблемы не должны быть исключениями сами по себе, но это зависит от вас. Это часто помогает придерживаться единой структуры исключений, чтобы вы могли использовать одну и ту же логику проверки в нескольких местах.
Во всяком случае, вам нужно единственное исключение CompilationException, возвращающееся через стек вызовов, потому что это говорит платформе о том, что эта вещь не компилировалась. Если кто-то в цепочке хочет знать, почему, то он может решить основные проблемы с помощью вызова, скажем, getCauses ().
Это также полезно с точки зрения пользовательского интерфейса. Эта информация, содержащаяся в Исключении, может быть надлежащим образом обработана перед возвратом через провод, чтобы вы могли дать своему конечному пользователю некоторую информацию о том, почему компиляция не удалась.