Это хороший дизайн, чтобы использовать предикаты Google Guavas для отделения методов фильтрации от классов
Сегодня я написал в своем блоге следующую статью о том, как предикаты Google Guavas можно использовать для повышения расширяемости вашего дизайна. Это заставило меня задать себе следующий вопрос: "Необходимость в этом решении вызвана более глубоким недостатком дизайна?". Есть ли другой "более чистый" способ достижения такого типа расширяемости? Я просто слишком об этом думаю?
1 ответ
Google Guava добавляет в Java несколько вещей, которые должны были быть, но не были (многие из которых включены в v7).
ИМО Гуава имеет тенденцию быть очень чистым и быстрым. Сравнить гуавы ComparisonChain
с (например) Apache Commons CompareToBuilder
классы. Оба делают одно и то же. В то время как Apache очень прост и достаточно легок для понимания новичками, Guava - более быстрый / чище / менее ресурсоемкий (лучше?) Подход.
Так далеко как Predicate
Так, они выполняют функцию и делают это хорошо, особенно когда вы комбинируете ее со всеми другими вещами гуавы, такими как Iterators.filter
,
Инструменты Guava должны быть поняты, прежде чем они будут использованы. Например, если вы собираетесь просмотреть фильтрованный список несколько раз, и ваш Predicate
имеет немаловажную стоимость (процессор / память / время), тогда вам может быть лучше перебрать его один раз и сохранить значения в Collection
во-первых, так как некоторые из этих методов просто обернуть Iterable
в класс которого next()
функция просто вызывает next()
на нефильтрованной Iterable
пока он не найдет запись, которая проходит фильтр и возвращает его.
Так что да, гуава очень полезна. В том числе Predicate
с и Iterables
а также Collections2
фильтрация и т. д. Однако, это всегда помогает узнать, что происходит под капотом, и какие проблемы или последствия для производительности вам могут понадобиться, если вы обнаружите, что ваш код нуждается в оптимизации.