суббота, 24 сентября 2011 г.

Google Guava: Preconditions class

Google Guava это библиотека в которой ребята из Google решили собрать разные базовые и универсальные методы, которые могут пригодится в любом Java проекте. В этом посте я приведу пример использования одного из её классов — Preconditions для проверки предусловий в методах.

Прежде чем начать её использовать, нужно её подключить. Счастливые пользователи Maven, должны добавить следующее в pom.xml:

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>10.0.1</version>
</dependency>
view raw pom.xml hosted with ❤ by GitHub


Класс Preconditions помогает упростить код для проверки предусловий в ваших методах. Например, если у вас есть код, похожий на этот:

if (count <= 0) {
throw IllegalArgumentException("Count should be greater than zero");
}


то он может быть упрощён до

import static com.google.common.base.Preconditions.checkArgument;
checkArgument(count > 0, "Count should be greater than zero");


Обратите внимание, что условие изменилось: в качестве аргумента вы указываете выражение, которое должно быть истинным (также как в случае c assert()).

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


Метод Тип исключения
checkArgument IllegalArgumentException
checkNotNull NullPointerException
checkElementIndex IndexOutOfBoundsException
checkPositionIndex IndexOutOfBoundsException


Соответствие методов с типами исключений легко запомнить, т.к. у них часть названия совпадают (не считая тех, которые оперируют с индексами).

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


checkArgument(count > 0, "Invalid count %s: should be greater than zero", count);


(Обратите внимание, что методы поддерживают только модификатор %s.)

Методы checkNotNull() и checkElementIndex() после проверки возвращают свои аргументы, а это значит, что их можно использовать в присвоении:


void setObject(Integer number) {
this.number = checkNotNull(number);
}


Также вам может быть интересна статья Google Guava vs Apache Commons for Argument Validation в которой приводится сравнение Guava и Apache Commons.

Комментариев нет:

Отправить комментарий