¿Existen convenciones de ordenación de métodos Java? [cerrado]


Tengo una clase grande (aproximadamente 40 métodos) que es parte de un paquete que enviaré como trabajo de curso. Actualmente, los métodos están bastante mezclados en términos de utilidad pública / privada, etc. y quiero ordenarlos de una manera sensata. ¿Hay una forma estándar de hacer esto? Por ejemplo, normalmente los campos se enumeran antes de los métodos, los constructores se enumeran antes de otros métodos, y los getters/setters duran; ¿qué pasa con los métodos restantes?

Author: fredley, 2011-01-12

8 answers

Algunas convenciones listan 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 cuando no hay una interfaz involucrada, si ves a lo que me refiero.

Otra idea es agrupar los métodos relacionados - esto hace que sea más fácil detectar costuras donde se podría dividir su clase grande existente en varias más pequeñas, más específicas.

 102
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 11:32:31
  1. Variables de clase (estáticas): Primero las variables de clase pública, luego 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 agruparse por funcionalidad que por alcance o accesibilidad. Por ejemplo, un método de clase privada puede estar entre dos métodos de instancia pública. El objetivo es hacer lectura y comprensión del código sencillo.

Fuente: http://www.oracle.com/technetwork/java/codeconventions-141855.html

 91
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 19:48:33

El enlace más preciso a "Convenciones de código": "Declaraciones de Clase e Interfaz"

 30
Author: Timofey Gorshkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-26 20:21:11

No estoy seguro de si existe un estándar universalmente aceptado, pero mis propias preferencias lo son;

  • constructores primero
  • métodos estáticos a continuación, si hay un método principal, siempre antes que otros métodos estáticos
  • métodos no estáticos a continuación, generalmente en orden de importancia del método seguido por cualquier método que llame. Esto significa que los métodos públicos que llaman a otros métodos de clase aparecen hacia la parte superior y los métodos privados que no llaman a inferior
  • métodos estándar como toString, equals y hashcode next
  • los getters y setters tienen un lugar especial reservado en la parte inferior de la clase
 12
Author: Qwerky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 11:44:49

Mi "convención": estático antes de instancia, público antes de privado, constructor antes de métodos, pero método principal en la parte inferior (si está presente).

 11
Author: eljenso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 11:36:17

40 métodos en una sola clase es un poco demasiado.

Tendría sentido mover parte de la funcionalidad a otras clases con nombres adecuados. Entonces es mucho más fácil de entender.

Cuando tienes menos, es mucho más fácil enumerarlos en un orden de lectura natural. Un paradigma frecuente es listar las cosas antes de o después de las necesitas , en el orden en que las necesitas.

Esto generalmente significa que main() va arriba o abajo.

 10
Author: Thorbjørn Ravn Andersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 04:34:00

Además, eclipse ofrece la posibilidad de ordenar los miembros de la clase por usted, si por alguna razón los mezcló:

Abra su archivo de clase, vaya a "Fuente" en el menú principal y seleccione "Ordenar miembros".

Tomado de aquí: Métodos de ordenación en Eclipse

 2
Author: Stephan Richter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:13

¿Estás usando Eclipse? Si es así, me quedaría con el orden de clasificación de miembros predeterminado, porque es probable que sea más familiar para quien lea su código (aunque no es mi orden de clasificación favorito.)

 1
Author: finnw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 11:33:02