practices manage example enum constant best java constants

java - manage - ¿Cuáles son sus pensamientos sobre las constantes del alcance del método?



java static class (7)

La ocultación de la información y la modularidad son principios clave, y un alcance estrecho es una mejor ocultación de la información. Si la constante solo es necesaria por el método, la ocultación es buena. Si y cuando la constante sea útil en otro lugar, llévela a un alcance más amplio, pero solo en la medida que sea necesario.

Probablemente esté preocupado porque esto es una constante y, por lo tanto, puede parecer pertenecer a alguna tabla de propiedades globales. Quizás sí. Tal vez no. Su preocupación es válida, pero no hay un mejor lugar para todas las constantes.

Por ejemplo:

public void doSomething() { final double MIN_INTEREST = 0.0; // ... }

Personalmente, prefiero ver estas constantes de sustitución declaradas estáticamente en el nivel de clase. Supongo que estoy buscando un "punto de vista de la industria" sobre el asunto.


La razón por la que puede definir una variable final a nivel de clase o nivel de método (local) es porque puede anular la constante estática global dentro del método (local).

Ejemplo:

public class Test { final double MIN_INTEREST = 0.0; /** * @param args */ public static void main(String[] args) { Test test = new Test(); test.doSomethingLocal(); test.doSomethingGlobal(); } public void doSomethingGlobal() { System.out.println("Global-> " + MIN_INTEREST); } public void doSomethingLocal() { final double MIN_INTEREST = 0.1; System.out.println("Local-> " + MIN_INTEREST); } }

El resultado será:

Local-> 0.1 Global-> 0.0

Entonces tu pregunta no tiene ningún sentido.


Mi posición inicial es que cada variable o constante debe declararse / inicializarse tan cerca de su primer uso como sea posible / práctico (es decir, no rompa un bloque lógico de código por la mitad, solo para declarar algunas líneas más cerca), y alcance como tan fuerte como sea posible. - A menos que puedas darme una maldita buena razón por la que debería ser diferente.

Por ejemplo, un método con alcance final no será visible en la API pública. A veces, este poco de información podría dejar de ser útil para los usuarios de su clase y debería moverse hacia arriba.

En el ejemplo que dio en la pregunta, diría que MIN_INTEREST es probablemente una de esas piezas de información que a un usuario le gustaría tener en sus manos, y debe tener el alcance de la clase, no el método. (Aunque no hay contexto para el código de ejemplo, y mi suposición podría estar completamente equivocada).


Pensaría que solo debes ponerlos en el nivel de clase si son usados ​​por múltiples métodos. Si solo se usa en ese método, eso se ve bien para mí.



Tengo una opinión diferente sobre esto: en mi humilde opinión, es mejor ubicarlos en el ámbito de clase / archivo, especialmente si trabajas en equipos por este motivo: digamos que comienzas con un pequeño fragmento de código ...

public void doSomething() { final double MIN_INTEREST = 0.0; // ... }

y otros miembros de tu equipo amplían la clase con un montón de métodos y ahora la clase es una maravillosa clase gigante de 500 lines / 50 methods . Imagine la experiencia de un ingeniero que está tratando de agregar un nuevo método con una constante, tendrá que explorar 1 toda la clase en busca de constantes que coincidan con su necesidad, 2 mover la constante al alcance de la clase, esperando que no haya conflictos con las existentes. el código y 3 también agregan su método.

Si, en cambio, agrega todas las constantes en el ámbito de archivo / clase, los ingenieros tienen un único lugar para buscar las constantes existentes y 2 derivan algunas constantes de otras donde tiene sentido. (por ejemplo, si tiene una constante para pi , también puede querer definir una nueva constante con un valor de pi/2 ).


He usado este método con constantes de alcance mismo, pero de vez en cuando un colega lo modificará durante las revisiones del código. De nuevo, estos colegas no están interesados ​​en leer / escribir en código abierto, pero están acostumbrados al software empresarial.

Les digo que NO tiene sentido usar una constante de nivel de clase si se usa en un solo método, pero he encontrado más de 1 colega que insiste en que se mueva hacia ARRIBA. Normalmente lo cumplo porque no soy tan rígido a menos que afecte la legibilidad y / o el rendimiento.