Apache Jakarta Commons Lang: Centraliza tus funciones de utilidad en Java

La mayoría de los desarrolladores han trabajado con un pequeño conjunto de funciones de utilidad, como capitalize, stringToInt o split. A menudo, esto es todo lo que se encuentra en una biblioteca común; no se invierte esfuerzo en pruebas unitarias, documentación o empaquetado. El código suele ser el producto de un solo desarrollador y no ha pasado por la revisión de pares.

Índice de Contenido
  1. La API de Apache Jakarta Commons Lang
  2. Participando en el proyecto
  3. Una pequeña muestra de Commons
  4. Excepciones
  5. Enum
  6. Builder
  7. El resto del paquete
  8. Solo una visión general

La API de Apache Jakarta Commons Lang

Apache Jakarta Commons Lang es una API cuyo objetivo es centralizar estas funciones de utilidad comunes con una buena documentación, alta estabilidad y una cantidad considerable de revisión por pares, o argumentos, según sea el caso.

Participando en el proyecto

Hace un par de años, la falta de planificación de código común era el estado de las cosas en donde trabajaba. Teníamos dos clases de manipulación de cadenas, un puñado de subpaquetes de utilidades repartidos por todo el sistema y una documentación tan confusa que a menudo no éramos conscientes de los paquetes de utilidades que otros habían creado. Además, no había un plan para extraer los componentes comunes en un paquete central.

Esto era frustrante, así que empecé a escribir mi propio conjunto de clases comunes en una biblioteca llamada GenJavaCore. Esta biblioteca alcanzó un cierto nivel de madurez con niveles de documentación aceptables y algo de estabilidad en las partes del código que utilizaba con frecuencia, pero no había revisión de pares. Tenía algunos usuarios en todo el mundo, pero nada importante.

Cuando me uní a Apache (mi contribución inicial fue con el String Taglib de Jakarta), parte de mi enfoque fue extraer la biblioteca de cadenas del String Taglib hacia el proyecto Jakarta Commons. Este incorporaba una biblioteca StringUtils más pequeña y existente y se convirtió en una de las piezas iniciales en el nuevo proyecto Lang.

La idea central de Jakarta Commons Lang es mejorar las bibliotecas estándar de Java, especialmente java.lang.*, pero también puede incorporar otras bibliotecas de Java, como las funciones de array de java.util.Date o Java. El núcleo de la biblioteca puede ser utilizado fácilmente por cualquier desarrollador de Java y evita declararse como un repositorio de clases de utilidad.

Cómo instalar y utilizar Java Web Start para desplegar aplicaciones Java

A lo largo del último año, el proyecto Jakarta Commons Lang ha estado evolucionando y madurando, construido a partir de código de los proyectos Jakarta, bibliotecas personales de los participantes (por ejemplo, GenJavaCore) y de las ideas de los propios participantes. Muchas veces, una idea simple ha evolucionado hacia algo más poderoso cuando ha sido discutida en la lista de correo.

Una pequeña muestra de Commons

Mi interés principal se centra en las clases de utilidad para cadenas, StringUtils, RandomStringUtils y CharSetUtils. Estas forman la base del String Taglib y son las clases en las que he invertido la mayor parte de mi tiempo. Naturalmente, las encuentro muy útiles; las utilizo a diario. Algunas características destacadas de la clase StringUtils son:

  • capitalise(String): una función para capitalizar cadenas (la ortografía británica se ha mantenido) que utiliza correctamente el toTitleCase en lugar de toUpperCase, como hacen la mayoría de las bibliotecas de cadenas.
  • join(Object[], String): une el toString de cada objeto en el arreglo de objetos en una sola cadena con el delimitador especificado. Por ejemplo, join( {“A”,”B”,C”}, “;”) resulta en “A;B;C”. También se puede unir un Iterator.
  • split(String, String): divide un fragmento de texto delimitado. No es tan potente como StringTokenizer (no maneja grupos de delimitadores juntos), pero es una herramienta rápida y fácil de aplicar en muchas ocasiones. Es el método opuesto de nuestro método join anterior: split(“A;B;C”,”;”) => {“A”, “B”, “C”}. El método split ahora puede encontrarse en java.lang.String en JDK 1.4.
  • reverseDelimitedString(String, String): este es un método interesante. Invierte un fragmento de texto basado en un delimitador. Por ejemplo, reverseDelimitedString(“org.apache.commons”) se convierte en “commons.apache.org”.
  • replace(String, String, String): este es el método de reemplazo de cadenas tan deseado. Mientras que JDK1.4 puede usar expresiones regulares para resolver el problema, la clase StringUtils proporciona una versión mucho más simple basada en cadenas que se utiliza con mayor frecuencia.

RandomStringUtils es una clase diseñada para crear fragmentos de texto aleatorios que a menudo se ven en contraseñas generadas. Tiene alcance completo a Unicode y tiene sobrecargas especiales para texto alfabético en inglés, ASCII, ASCII numérico y numérico. En el futuro, espero integrarlo en un marco aleatorizado más amplio y hacer que sea más sensible a la configuración regional.

Excepciones

En los últimos años, una de las clases reutilizables más comunes que he visto es la humilde NestedException, o CascadedException. Ahora se encuentra en java.lang.Throwable en JDK 1.4, el subpaquete de excepciones es un conjunto de clases que intentan manejar la mayoría de las implementaciones disponibles, lo cual es un cambio desde la versión beta de Commons Lang, en la que el subpaquete era simplemente una implementación.

Aunque podría parecer que algo así no es muy útil, las personas en JDK 1.3 pueden usar una implementación y las personas en JDK 1.4 pueden usar la versión del SDK. Es importante recordar que el cliente más importante de Commons Lang es el proyecto Jakarta en sí, que contiene muchos proyectos que los usuarios esperan que funcionen en varias versiones de Java al mismo tiempo.

En ExceptionUtils se encuentra el método útil:

Cómo utilizar un Iterador de filtrado para optimizar el procesamiento de objetos en Java
  • getStackTrace(Throwable), que convierte una excepción en una cadena.

Esta es una de esas utilidades para cadenas que siempre surge.

Enum

Cuando se lanzó Java, se consideró como una nueva versión de C. Aunque personas más sabias (no yo, yo tenía un Amiga agonizante en ese momento) podrían haber señalado que parecía C pero tenía características centrales de un conjunto de lenguajes muy diferentes, hubo muchos que se preguntaban qué partes de C faltaban y querían saber por qué. Cerca o en la parte superior de esa lista estaba la declaración enum de C. Clásicamente se usaba para implementar partes de código como:

enum day {monday, tuesday, wednesday, thursday, friday, saturday, sunday};

Esto permitía que el valor 0 se asignara automáticamente a monday, 1 a tuesday, etc. Luego, el compilador se encargaría de controlar el tipo de variable day y ayudar a proteger al programador de errores imprevistos.

Aunque hay algunas cuestiones sobre tener algo así en Java, especialmente porque Java no tiene una verdadera constante que se mantenga después de RMI o múltiples cargas de clase, la clase Enum de Lang se comporta admirablemente en RMI siempre que se evite el uso del método de comparación (==). Un ejemplo del enumerador day utilizando la clase Enum de Lang está disponible en Listado A.

Sí, es mucho más largo que la versión en C, pero esa es la desventaja de no tener la sintaxis en el lenguaje.

Dos consejos útiles para trabajar con gráficos en Java: AWT y MIME types

Builder

El último subpaquete del paquete org.apache.commons.lang del que hablaré es el paquete builder. Las clases contenidas en este paquete hacen que sea más fácil y seguro crear métodos estándar como equals, toString, hashCode y compareTo. Los builders de hashCode y equals siguen las reglas que Joshua Bloch establece en su clásico libro Effective Java: Programming Language Guide. Por ejemplo, para escribir un buen método hashCode, puedes pensar mucho en ello o hacer esto:

public int hashCode() {
return new HashCodeBuilder(17, 37).append(width)
.append(height)
.append(z)
.append(name)
.toHashCode();
}

Para escribir un método equals sencillo, puedes hacer esto:

public boolean equals(Object obj) {
if (!obj instanceof ThisClass) { return false; }
ThisClass tc = (ThisClass)obj;
return new EqualsBuilder().test(name, tc.name)
.test(age, tc.age)
.test(postcode, tc.postcode)
.isEquals();
}

Aunque la curva de aprendizaje de estas clases builder es ligeramente más alta que la de una simple función pública y estática, la facilidad de desarrollo que ofrecen es bastante evidente.

El resto del paquete

Existen otras clases en org.apache.commons.lang, como la clase NumberRange para representar un conjunto de números, y la clase NumberUtils, que contiene diversas funciones útiles como conversiones de cadenas a números y métodos de máximo/mínimo. Y no olvidemos ObjectUtils, donde se puede crear el método toString predeterminado para un objeto incluso si toString es sobrescrito.

Cómo crear y mantener un sitio web fácilmente para tu pequeña empresa con EzySite

También, SystemUtils permite acceder fácilmente a algunas variables de entorno de Java estándar, y SerializationUtils facilita la serialización de objetos.

Solo una visión general

He echado un vistazo rápido a la API Commons Lang. Me he saltado muchos métodos, pero espero haber dado una buena impresión general de la API. Está diseñada para hacer que todos tus proyectos de Java sean un poco más fáciles.

Trabajar en Apache Jakarta Commons Lang con otros desarrolladores ha sido una gran experiencia. Sobrevivir a la lista de correo Commons-Dev, donde se generaban largas y acaloradas discusiones sobre temas tan importantes como "¿Debería StringUtils tener un constructor público?" y "¿Cómo unimos este código de Jakarta Avalon?" fue otra experiencia. Es un ejemplo perfecto de un proyecto de código abierto, un lugar donde una pequeña comunidad construye, discute entre sí, aprende de los demás y establece contactos que no habría tenido la oportunidad de establecer hace una década.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Apache Jakarta Commons Lang: Centraliza tus funciones de utilidad en Java , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.