2009-05-16 19 views

Respuesta

12

No es realmente en la programación regular de Java.

Pero si trabaja extensamente con la inyección de dependencia, probablemente tenga pocos o ningún método estático. En ese contexto, es bastante común tener solo algunas clases de utilidad con métodos estáticos y ningún otro método estático.

-1

Supongo que no especialmente cuando se trata de singletons.

8

No, no está mal. Por ejemplo, un uso común es tener métodos de fábrica estáticos en una definición de clase.

4

Creo que está bien crear clases de utilidades estáticas, especialmente cuando no está realmente seguro (todavía) de cuál debe ser el diseño, porque aún está aprendiendo sobre el dominio del problema.

La estática es un marcador "aún diseñado correctamente". A menudo, la solución estática es perfectamente adecuada; pero a veces, a medida que el proyecto avanza, uno encuentra que tiene que volver a escribir esa "parte completa", pero tiene (en esa etapa posterior) una comprensión mucho más completa del dominio del problema y, por lo tanto, está en condiciones de diseñar realmente un "solución adecuada" a esos problemas.

Creo que los programadores nos criticamos injustamente por la "repetición". Debe hacer el trabajo para comprender el trabajo lo suficientemente bien como para hacer el trabajo correctamente. No veo forma de superar esta captura 22;

Puedo citar muchos ejemplos de estática de la API central. java.lang.Math, java.util.Arrays, java.util.Collections. PERO tenga en cuenta que estas clases son "clases utils" que existen solo para proporcionar un montón de métodos estáticos. En mi humilde opinión, la presencia de métodos estáticos en un "objeto con estado" solo está pidiendo ser refactorizado.

Apuesto a que a los diseñadores de la API de hoy les encantaría poder dividir Integer (y las otras clases de envoltorios) ... PERO están realmente atrapados con lo que tienen. Que es una advertencia en sí misma ... que la estática implica final, y hay una buena razón para que (a diferencia de C++) los métodos de Java se puedan anular de forma predeterminada. Static es intrínsecamente más "vinculante" que no estático ... por el truco NO se pueden adaptar implementaciones a diferentes situaciones, contextos, etc., etc.

Cheers. Keith.

+0

En "objetos con estado", ¿cómo tiende a refactorizar los métodos estáticos? ¿Los mueve a las clases auxiliares/utilitarias o simplemente los hace no estáticos? (¿Qué hay acerca de los métodos de ayuda privada? ¿Los haría no estáticos independientemente de si usan campos de instancia?) – Jonik

+0

Si un método no requiere estado, lo último que haría, ser un muñeco confeso, es darle acceso decirlo, porque entonces tendría que preocuparme por el estado de la clase mientras leía/escribía/editaba ese método (lo que podría ser una gran parte). Prefiero dividir las clases en "con estado" y Helper. Sé testigo de mi proyecto actual de C#. Un GmlReader (google GML) es una clase de utilidades estática con un método público: Public static IGeometry ReadGeometry (lector de XmlReader) ...muchas personas se mezclan serializar y deserializar en el DTO, que no se adapta bien a múltiples formatos. Cómo lo hago. YMMV. – corlettk

0

Creo que es una mala idea tener métodos estáticos y no estáticos en la misma clase con el mismo nombre. Esto puede ser muy confuso. Sugiero tratar de hacer que los nombres sean diferentes en este caso.

De forma similar, no haga métodos con el mismo nombre pero con mayúsculas o minúsculas o con el mismo nombre que la clase de la misma clase. Ambos son legales, e incluso ocurren en el JDK, pero confunden IHMO.

Cuestiones relacionadas