Руководство по actionscript. часть 2, стр. 080
Вариант 2. Упростить код, но по-прежнему использовать один класс для исключительных ситуаций класса VirtualPet
В данном случае мы изменяем метод setName ( ) таким образом, чтобы проверка всех трех исключительных ситуаций выполнялась в одном операторе if. Этот вариант аналогичен предыдущему, но использует более сжатый код.
Вариант 3. Использовать отладочные сообщения для нахождения различий между ошибками.
В данном случае мы добавляем конфигурируемые отладочные сообщения в класс VirtualPetNameException. Этот вариант незначительно увеличивает степень детализации по сравнению с двумя предыдущими, но только для удобства разработчика и только на этапе отладки.
Вариант 4. Создать пользовательский класс исключения для каждой исключительной ситуации.
Используя это вариант, мы создаем два пользовательских подкласса класса VirtualPetNameException: VirtualРеtlnsufficientDataException и VirtualPetExcessDataException. Этот вариант обеспечивает наибольшую степень детализации. Он позволяет программе независимо реагировать на три разновидности ошибок, относящихся к классу VirtualPet, используя формальную логику ветвлений.
Рассмотрим каждый из описанных вариантов.
Варианты 1 и 2. Использование одного пользовательского типа исключения. Первый вариант состоит в применении предыдущего описания метода setName ( ), которое генерирует ошибку одного и того же типа (VirtualPetNameException) для всех трех исключительных ситуаций, относящихся к классу Virtual Pet. Поскольку для генерации исключений этот метод использует класс VirtualPetNameException, а не класс Error, исключения класса Vi rtual Pet уже отличаются от других базовых исключений. Пользователи метода setName ( ) могут применять код, аналогичный следующему, для отличия ошибок, относящихся к классу VirtualPet, от других базовых ошибок:
try {
// Этот вызов метода setName( ) приведет к возникновению исключения // VirtualPetNameException. somePet. setName(«»);
// Другие инструкции в этом блоке try могут генерировать // другие базовые ошибки. Для демонстрационных целей
// мы непосредственно сгенерируем // базовую ошибку.
throw new Error(«A generic error.»); } catch (e:VirtualPetNameException) { // Здесь обрабатываются ошибки, связанные с именем объекта класса // VirtualPet.