Как стать автором
Обновить

Уголок Java-разработчика: библиотеки на каждый день

Время на прочтение3 мин
Количество просмотров8K
За все время, проведенное в написании кода на Java, у меня сформировался определенный набор полезных cторонних библиотек, которые прочно засели в classpath, и без которых не обходится ни один день разработки, будь то написание чего-либо «на коленке» или работа над серьезным проектом. Речь идет не о «монстрах» вроде Spring, Struts, Hibernate (это другая история), а скорее об утилитах, которые заполняют пробелы в Java SE API и позволяют сэкономить десяток-другой лишних строк кода/минут тут и там. Этой информацией я бы и хотел поделиться с хабрасообществом — надеюсь, она пригодится особенно тем, кто только начинает штурмовать Java, и позволит немного, но увеличить производительность труда.

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

Apache Commons: Collections
Очень хорошая библиотека, во многом дополняющая Java SE Collections Framework. Очень полезна особенно тем, кто из-за «требований клиента» застрял на Java 2 SE 1.4.2 (бывает и такое) и до сих пор мечтает о LinkedHashMap :)
  • CollectionUtils. Пожалуй, наиболее часто используемый класс с кучей «вкусного»:
    • filter/find(Collection, Predicate) — фильтрация и поиск по предикату.
    • forAllDo(Collection, Closure) — выполняет Closure для каждого элемента (добавят ли они когда-нибудь Closure в Java?)
    • is(Not)Empty(Collection) — позволяет не проверять на null перед вызовом (мелочь, но приятно, сравните с java.util.Collection.isEmpty())
    • isEqualCollection(Collection, Collection) — никогда не приходилось сравнивать две коллекции вручную?
    • Еще несколько десятков полезных методов.
  • ClosureUtils — для тех, кто давно мечтает о появлении полноценных Closure в Java.
  • Много других классов разного уровня полезности (здесь и дальше я перечисляю наиболее часто используемые в моем случае).
Apache Commons: DbUtils
  • DbUtils
    • closeQuietly(Connection, Statement, ResultSet) — работаете с JDBC напрямую? Надоело постоянно писать вложенные if/try/catch/finally для правильного закрытия ресурсов с проверкой на null? Тогда вам сюда :) Типичный код «из учебника»
              try {
                  // do some db work
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
              finally {
                  try {
                      if (rs!=null)
                          rs.close();
                  }
                  catch (Exception e) {
                      e.printStackTrace();
                  }
                  try {
                      if (st!=null)
                          st.close();
                  }
                  catch (Exception e) {
                      e.printStackTrace();
                  }
                  try {
                      if (conn!=null)
                          conn.close();
                  }
                  catch (Exception e) {
                      e.printStackTrace();
                  }
              }
      

      принимает более элегантную форму:

      				
              try {
                  // do some db work
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
              finally {
                  DbUtils.closeQuietly(conn,st,rs);
              }
      
Apache Commons: IO
Работа с файлами — не самая сильная сторона платформы, которую любят использовать критики Java (иногда, заслуженно). Например, запрос на реализацию java.io.File.copy() висит уже 10 лет. Commons IO частично выручает:
  • FileUtils
    • copyDirectory(File, File) — копирование директорий
    • сopyFile(File, File) — копирование файлов
    • listFiles(File, String[], boolean) — список файлов по расширению и рекурсивно. То, чему java.io.File так и не научился.
    • readFileToString(File, String)
    • writeStringToFile(File, String)
  • IOUtils
    • closeQuietly(Reader/Writer/InputStream/OutputStream) — также как и DbUtils, реально помогает избежать спагеттиподобного кода, который часто получается, когда нагромождаются if/try/catch/finally, чтобы просто закрыть I/O ресурс.
    • copy(InputStream, OutputStream) — это классика.
Apache Commons: Lang
Утилиты для работы со строками, reflection, сериализацией, объектами и системой. Пожалуй, наиболее часто используемая библиотека из Apache Commons.
  • StringUtils — огромное количество методов для манипуляций со строками.
    • is(Not)Blank/Empty(String) — о if (s!=null && s.trim().length()>0) давно пора забыть.
  • StringEscapeUtils
    • (un)escapeSql(String) — для тех, кто не пользуется PreparedStatement-и :)
    • (un)escapeHtml(String) — куда ж Web-разработчику без этого.
  • ToStringBuilder
    • reflectionToString(Object) — реализация toString(), основанная на рефлексии. То есть, результат работы метода автоматически изменится при добавлении или удалении полей объекта. Для ленивых, вроде меня :)
  • EqualsBuilder & HashCodeBuilder
    • reflectionEquals/HashCode(Object). Методы, конечно же, должны использоваться вместе. Подходят, когда равенство двух oбъектов означает равенство значений всех полей. Eclipse-пользователи возразят, что уже давно есть опция меню «generate hashCode() and equals()». Однако, эти два Builder-а автоматически учитывают структурные изменения объекта в процессе его эволюции, такие как добавление полей.
  • ExceptionUtils
    • getFullStrackTrace(Throwable). За 13 лет у java.lang.Throwable так и не появилось простого, но нужного метода, который бы выдал трейс в виде String…
Буду рад выслушать замечания и ваши советы по использованию jar-ов на каждый день.
Теги:
Хабы:
Всего голосов 28: ↑28 и ↓0+28
Комментарии3

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань