La especificación de lenguaje Java no parece defender la omisión de las variables que corresponden a las variables C static
.
Ocultar el estado en los métodos de clase tiene algunos inconvenientes cuando se ve desde una perspectiva de Java. En general, la existencia de una variable estática de nivel de función no es el tipo de detalle de implementación que desea exponer fuera de esa función.
Pero el estado del método es en realidad parte del estado de la clase, y las variables estáticas a nivel de método tendrían que serializarse/deserializarse cada vez que se persista el objeto. Es posible que esto no suene común, provenga de un fondo C, así que mencionaré algunos ejemplos comunes.
- Los clústeres de servidores de aplicaciones pueden pasar objetos de sesión de usuario entre nodos para proporcionar tolerancia a errores.
- JAXB se podría utilizar para ordenar de un objeto en un documento XML
- APP se puede utilizar para mantener el estado de objeto a una base de datos de
Si el valor de la variable es vale la pena ahorrar cuando se conserva el objeto, entonces hay una buena probabilidad de que el código fuera de esa clase necesite referenciar ese valor. Y de repente eso significa definir niveles de acceso: ¿una variable estática en un método público es automáticamente pública? ¿O un programador tendría que declararlo así?
También tenemos que pensar en la extensibilidad. ¿Se requerirían clases derivadas para implementar la misma variable estática? ¿O habría una referencia a la variable de la función en la clase base?
Es más probable que el método C que usaría una variable local estática sería un buen candidato para una clase en Java. Tiene estado y, con suerte, existe para un solo propósito.Hay un pequeño inconveniente al encapsular la funcionalidad en un objeto, y hace una separación más limpia entre los valores transitorios (como las variables locales) y el estado a más largo plazo.
"raro" es muy subjetivo. – Richard
¿cuál es tu caso de uso? En general, tiene sentido que los datos estáticos sean parte del estado del objeto. – TJD
@Richard - sí, no es extraño ... simplemente diferente. –