2011-01-12 9 views
104

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?

+0

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. –

Respuesta

84

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

+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

+12

@finnw, presente un informe de error. Se sabe que cosas más extrañas se implementan desde allí. –

10

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.

+1

tiene usted razón: este no es un problema de pedido – kostja

+4

No siempre tiene una opción, por ejemplo, si está implementando una interfaz con muchos métodos. – finnw

+5

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

1

¿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)

10

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).

11

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 y hashcode próximos
  • captadores y definidores tendrá un lugar especial derecho reservado en la parte inferior de la clase
+0

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

27

el enlace más preciso a «convenios de código»: «Class and Interface Declarations»

+5

+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. –

+0

@VadimKirilchuk «Archivo de Internet» no funcionaba ... –

+1

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html –

73
  1. clase (variables estáticas): Primero las variables de clase pública, luego el protegido, y luego el privado.

  2. Variables de instancia: Primero públicas, luego protegidas, y luego privadas.

  3. Constructores

  4. 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

+4

Esto tiene 15 años y probablemente esté un poco desactualizado con la aparición de IDEs modernos ... – assylias

+7

@assylias: IMO, la legibilidad es independiente de IDE. Mantener el público antes que lo privado generalmente es mejor. – saurabheights

2

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

Cuestiones relacionadas