Google Guava это библиотека в которой ребята из Google решили собрать разные базовые и универсальные методы, которые могут пригодится в любом Java проекте. В этом посте я приведу пример использования одного из её классов — Preconditions для проверки предусловий в методах.
Прежде чем начать её использовать, нужно её подключить. Счастливые пользователи Maven, должны добавить следующее в pom.xml:
Класс Preconditions помогает упростить код для проверки предусловий в ваших методах. Например, если у вас есть код, похожий на этот:
то он может быть упрощён до
Обратите внимание, что условие изменилось: в качестве аргумента вы указываете выражение, которое должно быть истинным (также как в случае c assert()).
В классе также присутствуют и другие методы, которые отличаются только типом возбуждаемых исключений:
Соответствие методов с типами исключений легко запомнить, т.к. у них часть названия совпадают (не считая тех, которые оперируют с индексами).
(Обратите внимание, что методы поддерживают только модификатор %s.)
Также вам может быть интересна статья Google Guava vs Apache Commons for Argument Validation в которой приводится сравнение Guava и Apache Commons.
Прежде чем начать её использовать, нужно её подключить. Счастливые пользователи Maven, должны добавить следующее в pom.xml:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependency> | |
<groupId>com.google.guava</groupId> | |
<artifactId>guava</artifactId> | |
<version>10.0.1</version> | |
</dependency> |
Класс Preconditions помогает упростить код для проверки предусловий в ваших методах. Например, если у вас есть код, похожий на этот:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (count <= 0) { | |
throw IllegalArgumentException("Count should be greater than zero"); | |
} |
то он может быть упрощён до
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 с переменным количество аргументов, у любого из вышеприведённых методов:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
checkArgument(count > 0, "Invalid count %s: should be greater than zero", count); |
(Обратите внимание, что методы поддерживают только модификатор %s.)
Методы checkNotNull() и checkElementIndex() после проверки возвращают свои аргументы, а это значит, что их можно использовать в присвоении:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void setObject(Integer number) { | |
this.number = checkNotNull(number); | |
} |
Также вам может быть интересна статья Google Guava vs Apache Commons for Argument Validation в которой приводится сравнение Guava и Apache Commons.
Комментариев нет:
Отправить комментарий