Есть ли смысл выбрасывать частное исключение?
Я хочу выдать исключение времени выполнения в случае, если мои инварианты класса признаны недействительными. Поскольку это ошибка программирования (аналогичная исключению NullPointerException), клиенты не должны перехватывать это исключение.
Должен ли класс исключения быть объявлен закрытым или общедоступным (или что-то еще)?
class Foo
{
// ...
private static class InvariantsViolated
{
// ...
}
}
Есть ли какие-либо рекомендации по пользовательским исключениям и видимости во время выполнения?
2 ответа
Вы можете рассмотреть возможность использования существующего исключения, если только вы не ожидаете, что это исключение будет перехвачено другим способом. Если это не ожидается, я не вижу необходимости в специальном исключении. Некоторые исключения вы можете использовать повторно
- AssertionError - Для меня это означает, что существует неисправимая ошибка программирования неопределенного типа.
- IllegalArgumentException - Для меня это означает, что только аргументы метода были неверны.
- IllegalStateException - Для меня это означает, что состояние объекта (например, комбинация значений) недопустимо для этой операции.
Если вам нужно пользовательское исключение, вы можете рассмотреть возможность расширения этих исключений или использовать одно из исключений, которые расширяют их.
Я считаю, что для того, чтобы throw
что-нибудь, этот объект должен реализовать Throwable
интерфейс, который означал, что он должен быть либо Error
или Exception
, Поскольку вы не хотите, чтобы ваши клиенты когда-либо улавливали это событие, вам, вероятно, следует использовать Error
, От Error
документация:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить.
Таким образом, вы можете избежать страшных Exception
ловушки, которые обычно используют некоторые программисты - в большинстве случаев эти программисты даже не думают о том, чтобы поймать Error
совсем...