Есть ли смысл выбрасывать частное исключение? - PullRequest
5 голосов
/ 14 марта 2011

Я хочу вызвать исключение времени выполнения, если мои инварианты класса признаны недействительными. Поскольку это ошибка программирования (аналогичная исключению NullPointerException), клиенты не должны перехватывать это исключение.

Должен ли класс исключения быть объявлен закрытым или общедоступным (или что-то еще)?

class Foo
{
    // ...

    private static class InvariantsViolated
    {
        // ...
    }
}

Существуют ли какие-либо рекомендации по пользовательским исключениям и видимости во время выполнения?

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Вы можете рассмотреть возможность использования существующего исключения, если только вы не ожидаете, что это исключение будет перехвачено другим способом.Если это не ожидается, я не вижу необходимости в специальном исключении.Некоторые исключения, которые вы могли бы повторно использовать

  • AssertionError - Для меня это означает, что существует неисправимая ошибка программирования неопределенного типа.
  • IllegalArgumentException - Для меня это означает, что только аргументы метода были неверными.
  • IllegalStateException - Для меня это означает, что состояние объекта (например, комбинация значений) недопустимо дляэта операция.

Если вы хотите настраиваемое исключение, вы можете рассмотреть возможность расширения этих исключений или использования одного из исключений, расширяющих их.

0 голосов
/ 14 марта 2011

Я считаю, что для throw чего-либо этот объект должен реализовывать интерфейс Throwable, что означало, что он должен быть либо Error, либо Exception.Поскольку вы не хотите, чтобы ваши клиенты перехватывали это событие когда-либо , вам, вероятно, следует использовать Error.Из Error документации :

Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться устранить.

Таким образом, вы можете избежать страшных Exception ловушек, которые обычно используют некоторые программисты - в большинстве случаев эти программисты даже не думают о том, чтобы вообще поймать Error ...

...