Пользовательское исключение, такое как IllegalArgumentException, чтобы иметь хорошую информацию журнала - PullRequest
0 голосов
/ 06 февраля 2012

Хорошо ли иметь пользовательское исключение, такое как IllegalArgumentException, и выдавать его во всех случаях, когда методы могут получить нулевую ссылку вместо действительного значения объекта?

 public void method(String str){
        if(str == null)throw new CustomIllegalArgumentException("str cannot be null");
    }

Я думаю, что таким образом я всегда вижу разницу между такими недопустимыми исключениями аргументов и другими исключениями RuntimeExceptions.

Это хорошая идея или нет?

П.С .: Я смотрел такие посты как Избежание! = Пустые выражения

** ОБНОВЛЕНИЕ: ** Так что я буду знать, что это программистское исключение, и у меня будет чистый лог.

1 Ответ

4 голосов
/ 06 февраля 2012

IllegalArgumentException - это стандарт, а не пользовательское исключение.Обычно в качестве аргумента используется NullPointerException, если аргумент равен null, а это не должно быть.

В общем случае предпочтительнее использовать стандартные исключения, если они подходят для вашего особого случая.См. Также пункт 60 в «Effective Java 2nd edition» («Поддерживайте использование стандартных исключений»).Одним из преимуществ этого является то, что вы можете написать один обработчик для схожих условий, которые могут возникнуть как в вашем собственном коде, так и в используемых вами библиотеках.

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

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

См. Также Preconditons служебный класс от Google.В частности, checkNotNull() служебный метод, который также выдает NullPointerException, когда его аргумент равен null.

...