Подтвердить что ты не робот

Каковы большие улучшения между библиотеками эквивалентов guava и apache?

В настоящее время мы используем коллекции apache, string utils и т.д. Мне нужно решить, следует ли нам переключаться с реализации основы apache.

Важными критериями являются простота использования разработчиками. Производительность/использование памяти еще не является важной проблемой для нас. Скорость разработки - вот ключевые критерии на данный момент.

Я был бы признателен за то, что жизнь разработчика стала значительно проще с помощью guava.

4b9b3361

Ответ 1

Сначала, как объяснил javamonkey79, в то время как Google Guava и Apache Commons действительно используют аналогичные функции, у них также есть функциональность, отсутствующая у их коллеги. Таким образом, ограничение себя только одной библиотекой может быть неразумным.

Говоря, если бы мне пришлось выбирать, я бы предпочел использовать Guava, поддерживая Apache Commons для (редких) случаев, когда Guava не обладает необходимой функциональностью. Позвольте мне попытаться объяснить, почему.

Гува более "современный"

Apache Commons - действительно зрелая библиотека, но она также почти 10 лет и нацелена на Java 1.4. Guava был открытый в 2007 году, нацеленный на Java 5, и, таким образом, Гува значительно выигрывает от возможностей Java 5: generics, varargs, enums, и autoboxing.

Согласно разработчикам Guava, генерики - одна из причин, по которой они решили создать новую библиотеку вместо улучшения Apache Commons (см. FAQ по сборкам google-коллекций, под заголовком "Почему Google построил все это, когда он мог бы попытаться улучшить коллекцию Apache Commons?" ).

Я согласен с ними: часто критикуя (без переодевания, ограниченного из-за обратной совместимости), Java-дженерики по-прежнему очень полезны при правильном использовании, например, в Guava. Я предпочел бы отказаться от работы с негенерированными коллекциями!

(Обратите внимание, что Apache Commons 3.0, делает целевой Java 1.5 +)

Гува очень хорошо спроектирован/задокументирован

Этот код полна лучших практик и полезных шаблонов, чтобы сделать API более читабельным, доступным для обнаружения, эффективным, безопасным, потокобезопасным...

Прочитав эффективную Java (потрясающая книга BTW), я вижу эти шаблоны повсюду в коде:

  • factory (например, ImmutableList.copyOf())
  • шаблон конструктора (ImmutableList.builder(), Joiner, CharMatcher, Splitter, Ordering,...)
  • неизменяемость (неизменные коллекции, CharMatcher, Joiner, Splitter,...)
  • скрытие реализации (Predicates.xXx,...)
  • благоприятный состав над наследованием (коллекции ForwardXXX)
  • нулевые чеки
  • шаблон enum-singleton
  • прокси сериализации
  • хорошо продуманные соглашения об именах

Я мог бы продолжать часами, объясняя преимущества этих вариантов дизайна (скажите, хотите ли вы меня). Дело в том, что эти шаблоны не только "для шоу", они имеют реальную ценность: API - это удовольствие использовать, легче учиться (я забыл сказать, насколько хорошо он документирован?), Более эффективен и многие классы проще/поточно-безопасны из-за их неизменности.

В качестве бонуса вы много узнаете, посмотрев код:)

Гуава согласована

Кевин Бурриллион (ведущий разработчик Guava) отлично справляется с сохранением высокого уровня качества/согласованности в библиотеке. Он, конечно, не одинок, и много отличные разработчики внесли свой вклад в Guava (даже Джошуа Блох, который теперь работает в Google!).

Основные философии и дизайнерские решения Guava согласованы по всей библиотеке, и разработчики придерживаются очень хороших (IMO) принципов проектирования API, узнав о прошлых ошибках API JDK (но не об их ошибках).

Гуава имеет высокое отношение мощности к весу

Дизайнеры Guava сопротивляются искушению добавить слишком много функций, ограничивая API до самых полезных. Им очень сложно удалить добавленную функцию, и следуйте Девиз Джошуа Блоха по дизайну API: "Если у вас есть сомнения, оставьте это" , Кроме того, использование аннотации @Beta позволяет проверять некоторые варианты дизайна без привязки к определенному API.

Варианты дизайна, упомянутые выше, позволяют использовать очень компактный API. Просто посмотрите MapMaker, чтобы увидеть силовую упаковку внутри "простого" строителя. Другие хорошие (хотя и более простые?) Примеры: CharMatcher, Splitter и Ordering.

Также очень легко составить различные части Гуавы. Например, скажем, вы хотите кэшировать результат сложного function? Подайте эту функцию на ваш MapMaker и BINGO, у вас есть потокобезопасная вычислительная карта/кеш. Нужно ограничить входы карты/функции конкретными строками? Нет проблем, оберните его внутри ConstrainedMap, используя CharMatcher, чтобы отклонить неприемлемые строки...

Гуава находится в активной разработке

Хотя развитие Apache Commons, похоже, ускорилось с работой в Commons Lang 3.0, Guava кажется забрать больше пара в данный момент, в то время как Google открывать источники больше своих внутренних классов.

Так как Google сильно полагается на это внутренне, я не думаю, что он скоро исчезнет. Кроме того, открытые источники общих библиотек позволяют Google более легко открывать исходные другие библиотеки, которые зависят от него (вместо переупаковывать их, например Guice в настоящее время делает).

Заключение

По всем вышеперечисленным причинам Guava является моей библиотекой при запуске нового проекта. И я очень благодарен Google и огромным разработчикам Guava, которые создали эту фантастическую библиотеку.


PS: вы также можете прочитать этот другой вопрос SO

PPS: у меня нет акций Google (пока)

Ответ 2

Я использую guava с августа 2010 года, начиная с версии r06. В принципе, у меня появилась новая Java-библиотека, поэтому я осмотрел лучшую библиотеку дополнений для J2SE API. Традиционно мы использовали библиотеки Apache Commons, но я хотел посмотреть, что там было, и начал использовать Guava.

Pros

  • Языковые конструкции Java 5.0. Библиотека берет большую часть своих дизайнерских речей из блоха "Эффективная Java: 2-е издание": неизменность, шаблон застройщика, фабрики вместо конструкторов, дженериков и т.д. Это делает ваш код более жестким и выразительным.
  • Поддержка функционального программирования, в частности, с интерфейсами функций и предикатов верхнего уровня.

Против

  • Это не достаточная замена для Apache Commons, в частности commons-codec.
  • Там нет "кулинарной книги guava". Библиотека минималистична и ортогональна. Таким образом, существует определенная кривая обучения, чтобы в полной мере использовать ее. Как уже упоминалось, Javadoc превосходный, но некоторые более длинные исходные коды будут полезны.
  • Если вы находитесь в среде, требующей Java 1.3 или 1.4, вам не повезло.

Для меня Guava заставляет Java чувствовать себя ближе к краткому, выразительному сценарию языка и тому замечательному.

Ответ 3

По моему опыту я не понимаю, что они соперничают друг с другом, или что гуава улучшается в Apache libs. Скорее, guava дополняет Apache libs. В guava есть классы и утилиты, которые не находятся в apache и наоборот.

Поэтому я не знаю, что вам нужно переключиться как таковое - я бы сказал: "Используйте правильный инструмент для правильной работы".