Поскольку Exception
выдается из-за неудачной проверки предварительного условия, я думаю, что вместо того, чтобы просто констатировать факт, вы должны указать требование, которое было нарушено.
То есть вместо "username is null"
скажите "username should not be null"
.
Об использовании библиотек для проверки предварительных условий
В качестве подсказки вы можете использовать одну из множества библиотек, предназначенных для облегчения проверки предварительных условий. Многие коды в Guava используют com.google.common.base.Preconditions
Простые статические методы, которые будут вызываться в начале ваших собственных методов для проверки правильности аргументов и состояния. Это позволяет создавать такие конструкции, как
if (count <= 0) {
throw new IllegalArgumentException("must be positive: " + count);
}
заменить на более компактный
checkArgument(count > 0, "must be positive: %s", count);
Более важным здесь является то, что он имеет checkNotNull
, что позволяет просто написать:
checkNotNull(username, "username should not be null");
Обратите внимание, как естественно выглядит приведенный выше код с подробным сообщением, в котором явно указывается требование, которое было нарушено.
Альтернатива констатации фактов более неудобна:
// Awkward!
checkArgument(count > 0, "is negative or zero: %s", count);
checkNotNull(username, "username is null");
Более того, это также потенциально менее полезно, поскольку клиент может уже знать об этом факте, а исключение не поможет ему понять, каковы фактические требования.
On IllegalArgumentException
vs NullPointerException
В то время как ваш исходный код выдает IllegalArgumentException
для null
аргументов, вместо этого Preconditions.checkNotNull
в Guava выдает NullPointerException
.
Это соответствует правилам, установленным API:
NullPointerException
: приложения должны генерировать экземпляры этого класс для указания других незаконных видов использования объекта null
.
Кроме того, вот цитата из Effective Java 2nd Edition: пункт 60. Отдавайте предпочтение использованию стандартных исключений:
Возможно, все ошибочные вызовы методов сводятся к недопустимому аргументу или недопустимому состоянию, но другие исключения стандартно используются для определенных видов недопустимых аргументов и состояний. Если вызывающий объект передает null
в каком-либо параметре, для которого запрещены нулевые значения, соглашение требует, чтобы выбрасывалось NullPointerException
, а не IllegalArgumentException
.
person
polygenelubricants
schedule
11.06.2010