Поскольку Exception
выбрасывается из-за неудачной проверки предварительных условий, я думаю, что вместо того, чтобы просто констатировать факт, следует указать требование , которое было нарушено.
То есть вместо того, чтобы сказать "username is null"
, скажем "username should not be null"
.
Об использовании библиотек для проверки предварительных условий
В качестве подсказки вы можете использовать одну из множества библиотек, разработанных для облегчения проверки предварительных условий. Многие код в Гуаве использует 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");
Более того, это также потенциально менее полезно, так как клиент может уже знать об этом факте, и исключение не помогает ему выяснить, каковы действительные требования .
Вкл. IllegalArgumentException
против NullPointerException
В то время как ваш исходный код генерирует IllegalArgumentException
в null
аргументах, Preconditions.checkNotNull
в Guava вместо этого NullPointerException
.
Это соответствует директиве, установленной API:
NullPointerException
: приложения должны генерировать экземпляры этого класса, чтобы указать на другое незаконное использование объекта null
.
Кроме того, вот цитата из Effective Java 2nd Edition: Item 60: Поддержите использование стандартных исключений :
Возможно, все ошибочные вызовы методов сводятся к недопустимому аргументу или недопустимому состоянию, но другие исключения стандартно используются для определенных видов недопустимых аргументов и состояний. Если вызывающая сторона передает null
в каком-либо параметре, для которого нулевые значения запрещены, соглашение предписывает выбрасывать NullPointerException
вместо IllegalArgumentException
.