Tengo una clase de gran tamaño (40 o más métodos) que es parte de un paquete que enviaré como trabajo de curso. Actualmente, los métodos están bastante desordenados en términos de utilidad pública/privada, etc. y quiero pedirlos de una manera sensata. ¿Hay una forma estándar de hacer esto? P.ej. normalmente los campos se enumeran antes que los métodos, los constructores se enumeran antes que otros métodos, y los getters/setters duran; ¿qué pasa con los métodos restantes?¿Hay algún convenio de ordenación de métodos Java?
Respuesta
Algunas convenciones enumeran primero todos los métodos públicos y luego todos los privados, lo que significa que es fácil separar la API de la implementación, incluso si no hay interfaz involucrada, si entiendes lo que quiero decir.
Otra idea es agrupar métodos relacionados, esto hace que sea más fácil detectar uniones donde podría dividir su clase grande existente en varias más pequeñas y más específicas.
+1. Prefiero clasificar por visibilidad. Shame Eclipse no puede hacer esto automáticamente (siempre agrupará todos los constructores y todos los métodos juntos). – finnw
@finnw, presente un informe de error. Se sabe que cosas más extrañas se implementan desde allí. –
40 métodos en una sola clase es un poco mucho.
¿Tendría sentido trasladar parte de la funcionalidad a otras clases, adecuadamente nombradas? Entonces es mucho más fácil darle sentido.
Cuando tiene menos, es mucho más fácil enumerarlos en un orden natural de lectura. Un paradigma frecuente es enumerar las cosas antes de o después de las necesita, en el orden en que las necesita.
Esto generalmente significa que main() va arriba o abajo.
tiene usted razón: este no es un problema de pedido – kostja
No siempre tiene una opción, por ejemplo, si está implementando una interfaz con muchos métodos. – finnw
Esta es una actividad de Android, por lo que hay lotes que simplemente no pueden ir a ningún otro lado, 'onPause()', 'onResume()' etc., así como todos mis campos 'OnClickListener', que, aunque son campos, no se ven ni se comportan como ellos, por lo que es sensato enumerarlos por separado. – fredley
¿Estás utilizando Eclipse? De ser así, me quedaría con el orden de clasificación de miembros predeterminado, porque es probable que sea más familiar para quien lea tu código (aunque no es mi orden de clasificación favorito)
Mi "convención": estática antes de instancia, pública antes privado, constructor antes que los métodos, pero el método principal en la parte inferior (si está presente).
No estoy seguro si hay un estándar universalmente aceptado pero mis preferencias son;
- constructores primeros
- métodos estáticos próximos, si hay un método principal, siempre antes de que otros métodos estáticos
- métodos no estáticos siguiente, por lo general en el orden de la importancia del método seguido por cualquiera de los métodos que se llamadas. Esto significa que los métodos públicos que requieren otros métodos de clase aparecerá hacia los métodos superiores y privadas que requieren ningún otro método por lo general terminan hacia las
- métodos estándar inferiores como
toString
,equals
yhashcode
próximos - captadores y definidores tendrá un lugar especial derecho reservado en la parte inferior de la clase
Realmente prefiero los constructores al final porque un constructor correctamente escrito debería hacer muy poco más que asignar sus argumentos a las propiedades. – GordonM
el enlace más preciso a «convenios de código»: «Class and Interface Declarations»
+1, afaik: esta es la ÚNICA publicación que realmente responde la pregunta. SÍ existe un orden estándar según lo dictado por Oracle y Sun: 1. comentario público, 2. clase, 3. comentario interno, 4. datos estáticos, 5. datos de instancia, 6. ctors, 7. métodos y dentro de cada grupo de sección lógicamente, no por accesibilidad. –
@VadimKirilchuk «Archivo de Internet» no funcionaba ... –
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html –
clase (variables estáticas): Primero las variables de clase pública, luego el protegido, y luego el privado.
Variables de instancia: Primero públicas, luego protegidas, y luego privadas.
Constructores
Métodos: Estos métodos deben ser agrupados por funcionalidad en lugar que por alcance o la accesibilidad. Por ejemplo, un método de clase privado puede estar entre dos métodos de instancias públicas. El objetivo es hacer que leer y entender el código sea más fácil.
Fuente: http://www.oracle.com/technetwork/java/codeconventions-141855.html
Esto tiene 15 años y probablemente esté un poco desactualizado con la aparición de IDEs modernos ... – assylias
@assylias: IMO, la legibilidad es independiente de IDE. Mantener el público antes que lo privado generalmente es mejor. – saurabheights
Además, eclipse ofrece la posibilidad de ordenar los miembros de la clase para que, si por alguna razón se confundan:
Abra el archivo de clase, el ir a la "Fuente "en el menú principal y seleccione" Ordenar miembros ".
tomado de aquí: Sorting methods in Eclipse
- 1. Convenio Objective-C para métodos reemplazados
- 2. Algún algoritmo de ordenación de O (n)
- 3. SpecFlow - ordenación de varios métodos BeforeScenario
- 4. Opciones de ordenación Java TreeMap?
- 5. ¿Hay algún Descompilador de Java que pueda descompilar correctamente las llamadas a métodos sobrecargados?
- 6. ¿Hay algún recopilador de métricas automatizado para mi proyecto Java?
- 7. ¿Hay algún punto verdadero en la interfaz de Java?
- 8. ¿Hay algún programa como LINQPad para Java?
- 9. ¿Hay algún "depurador visual" para Java?
- 10. ¿Hay algún IDE en línea para Java?
- 11. ¿Hay algún buen analizador X12 en Java?
- 12. Ordenación z de ventanas en java
- 13. ¿Hay algún buen paquete de migración de subprocesos de Java?
- 14. ¿Hay algún Principio de Clojure?
- 15. ¿Hay algún modismo en Java para los métodos vacíos que existen para satisfacer una interfaz?
- 16. ¿Hay algún tipo de herramienta de cobertura 'assertion' (para Java)?
- 17. ¿Hay algún marco de complemento para Applets de Java?
- 18. ¿Hay algún equivalente Java de la función http_build_query de PHP?
- 19. ¿Hay algún par genérico de valor de nombre en java?
- 20. Java Objeto de ordenación en ArrayList
- 21. ¿Hay algún analizador de respuesta HTTP simple para Java?
- 22. ¿Hay algún libro que estudie código abierto de Java?
- 23. ¿Hay algún analizador EDIFACT de código abierto bueno en Java?
- 24. ¿Hay algún paquete de Java para manejar las URLs construidas?
- 25. ¿Hay algún reemplazo de doble largo en java?
- 26. ¿Hay algún beneficio real de usar J #?
- 27. ¿Hay algún resumen de guayaba?
- 28. ¿Hay algún motor AI de código abierto?
- 29. ¿Hay alguna forma de agrupar métodos en Java/Eclipse?
- 30. ¿Hay algún lenguaje estático de tipo pato?
También tenga en cuenta que cuando _working_ con código como este, la mayoría de IDE le permiten ver la definición de lo que está por debajo del cursor de forma automática. Esto significa que no tienes que hacer nada más que mirar. –