Имеет ли смысл создавать частное исключение?


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

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

class Foo
{
    // ...

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

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

2 4

2 ответа:

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

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

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

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

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

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