Commons Lang 2.2 lançado

O macro-projeto Jakarta lançou dia 4 de outubro a biblioteca Java Commons Lang versão 2.2. A nova versão traz apenas correções de bugs e pequenas melhorias neste excelente componente utilitário de programação.

Jakarta Commons

O projeto Jakarta Commons, da Fundação Apache, provê componentes reusáveis Java comumente necessários em diversas necessidades de programação Java e que complementam a API Java padrão. Inclui desde bibliotecas Java com uma grande quantidade de métodos utilitários provendo funcionalidades não encontradas na API Java, ou melhoradas em relação ao equivalente na API padrão, até componentes mais sofisticados provendo recursos de grande utilidade geral ou específica.

Em outras palavras, Jakarta Commons são componentes úteis para você não “reinventar a roda” em Java. Se algum recurso de programação ou estrutura de dados de uso freqüente já não estiver na extensa e abrangente API padrão do JDK, então muito provavelmente deve estar pronta em um dos componentes Commons. Se você não encontrou uma funcionalidade que lhe parece básica nem na API Java SE nem nos componentes Commons, sugiro procurar neles outra vez antes de implementar por si mesmo.

O projeto Commons provê mais de 30 componentes: Attributes, BeanUtils, Betwixt, Chain, CLI, Codec, Collections, Configuration, Daemon, DBCP, DbUtils, Digester, Discovery, EL, Email, FileUpload, HttpClient, IO, Jelly, Jexl, JXPath, Lang, Launcher, Logging, Math, Modeler, Net, Pool, Primitives, SCXML, Transaction, Validator, VFS.

Commons Lang

O componente Commons Lang, como o próprio nome sugere, complementa funcionalidades do núcleo da API da linguagem Java, como as classes do pacote java.lang. Você pode pensar que a API Java SE, já caminhando para seu sexto release, já deve ter praticamente todo o básico, mas Commons Lang ainda oferece muitos recursos complementares, às vezes simples, mas sempre muito úteis e que podem tornar sua codificação Java mais ágil, concisa, clara, prática, robusta e eficiente.

Por exemplo, na manipulação de texto (String), a classe StringUtils oferece dezenas de métodos para manipulação de strings, todos null safe, isto é, tratam sempre a possibilidade do objeto String nulo (null) para que nunca gerem a exceção NullPointerException.

isEmpty(str) verifica se uma String é vazia (“”) ou null. Claro que sempre pode-se fazer um teste como
if (texto == null || texto.length() == 0)
Mas não fica muito mais conciso e elegante fazer um import static [JDK5+] do método StringUtils.isEmpty e testar simplesmente como abaixo?
if (isEmpty(texto))

E que tal um equals(str1, str2) que trata a possibilidade de um ou ambos os parâmetros serem nulos? Trivial, mas muito útil.

Mudando para o pacote time a classe DateUtils oferece métodos como addDays(), addHours(), addWeeks(), addYears() etc. que retornam um novo objeto resultante do cálculo data + campo; além de métodos para comparar se dois objetos Date estão no mesmo dia, e para arrendondar e truncar uma data (até o nível especificado, como hora, dia, mês etc.). Já FastDateFormat é uma implementação mais rápida e thread-safe da classe SimpleDateFormat do Java.

Isto é só uma pequena amostra. Sugiro você conferir por si mesmo. E se gostar do Commons Lang (aposto que sim!), não deixe de conhecer os demais componentes do projeto Commons.