una tipos objetos objeto instanciar instancia ejemplos crear como clases clase java utility utility-method

java - tipos - ¿Cómo puedo crear una clase de utilidad?



crear objetos y clases en java (4)

Esta pregunta ya tiene una respuesta aquí:

Quiero crear una clase con métodos de utilidad, por ejemplo

public class Util { public static void f (int i) {...} public static int g (int i, int j) {...} }

¿Cuál es el mejor método para crear una clase de utilidad?

¿Debo usar un constructor privado?

¿Debería hacer la clase de utilidad para la clase abstracta?

¿Debo hacer nada?


De acuerdo con Joshua Bloch (Effective Java), deberías usar un constructor privado que siempre lanza una excepción. Eso finalmente desalentará al usuario a crear una instancia de clase util.

No se recomienda el resumen de la clase de calificación porque el resumen sugiere que la clase está diseñada para la herencia.


Hacer un abstract clase envía un mensaje a los lectores de su código que desea que los usuarios de su clase abstract subclasifiquen. Sin embargo, esto no es lo que quieres hacer: una clase de utilidad no se debe subclasificar.

Por lo tanto, agregar un constructor privado es una mejor opción aquí. También debe hacer que la clase sea final para no permitir la creación de subclases de su clase de utilidad.


Haría la clase final y cada método sería static .

Entonces la clase no se puede extender y los métodos pueden ser llamados por Classname.methodName . Si agrega miembros, asegúrese de que funcionen con seguridad de subprocesos ;)


Para una clase de utilidad completamente apátrida en Java, sugiero que la clase se declare pública y final y que tenga un constructor privado para evitar la creación de instancias. La palabra clave final evita la subclasificación y puede mejorar la eficiencia en el tiempo de ejecución.

La clase debe contener todos los métodos estáticos y no debe declararse abstracta (ya que implicaría que la clase no es concreta y debe implementarse de alguna manera).

A la clase se le debe dar un nombre que corresponda a su conjunto de utilidades proporcionadas (o "Util" si la clase debe proporcionar una amplia gama de utilidades no categorizadas).

La clase no debe contener una clase anidada a menos que la clase anidada también sea una clase de utilidad (aunque esta práctica es potencialmente compleja y perjudica la legibilidad).

Los métodos en la clase deben tener nombres apropiados.

Los métodos utilizados solo por la clase en sí deben ser privados.

La clase no debe tener ningún campo de clase no final / no estático.

La clase también puede ser importada estáticamente por otras clases para mejorar la legibilidad del código (sin embargo, esto depende de la complejidad del proyecto).

Ejemplo:

public final class ExampleUtilities{ // Example Utility method public static int foo(int i, int j){ int val; //Do stuff return val; } // Example Utility method overloaded public static float foo(float i, float j) float val; //Do stuff return val; } // Example Utility method calling private method public static long bar(int p){ return hid(p) * hid(p); } // Example private method private static long hid(int i){ return i * 2 + 1; } }

Quizás lo más importante de todo es que la documentación de cada método debe ser precisa y descriptiva. Lo más probable es que los métodos de esta clase se usen con mucha frecuencia y es bueno contar con documentación de alta calidad para complementar el código.