Solo quería aclarar una pregunta que tengo. ¿Cuál es el punto de tener un método estático privado en lugar de un método normal con visibilidad privada?
Hubiera pensado que una ventaja de tener un método estático es que se puede llamar sin una instancia de una clase, pero dado que es privado, ¿hay incluso un punto para que sea estático?
La única razón por la que puedo pensar es que ayuda a comprender conceptualmente el método a nivel de clase en lugar de a nivel de objeto.
object-oriented
class
methods
static-methods
access-modifiers
Rehan Naqvi
fuente
fuente
Respuestas:
La característica de ser estático es independiente de la visibilidad.
Las razones por las que querrás tener un método estático (algunos códigos que no dependen de miembros no estáticos) seguirán siendo útiles. Pero tal vez no quieras que nadie / nada lo use, solo tu clase.
fuente
<
a<
, etc. Cuando está escrito ...&
a&
[si yo escribiendo el código, me gustaría convertir&
a&
incluso si yo no esperaba que fuera necesario, pero supongamos no lo hace]. Que más tarde se convierte en necesaria para manejar los símbolos de unión, pero el método es público, el cambio que se expanda&
a&
podría romper el código externo que lleva a cabo su propia&
-a-&
sustitución. Sin embargo, si el método es privado, se podría arreglar para manejarlo&
sin causar problemas para ningún código externo.Una razón bastante común (en Java) sería la inicialización de variables de campo inmutables en un constructor mediante el uso de un
private static
método simple para reducir el desorden del constructor.private
: las clases externas no deberían verlo.static
: puede realizar alguna operación, independiente 1 del estado de la clase de host.Sigue un ejemplo un tanto artificial ...
p.ej:
1 Suponiendo que no tiene interacción con otras
static
variables.fuente
super(...)
llamada debe ser la primera línea del constructor de su clase, por lo que no puede declarar variables locales para ayudarlo a determinar qué pasar a la súper llamada. Sin embargo, puede llamar a métodos estáticos (privados), que usan tantas líneas como sea necesario para calcular el valor que se pasa al superconstructor.Un caso de uso común para un
private static
método es un método de utilidad que esfuente
Verá que tiene algunas líneas de código que se repiten en muchos de sus métodos, por lo que decide extraerlos a un solo método, ya que el código duplicado no es bueno.
Hace que el método sea privado ya que no está diseñado para un uso generalizado y no desea que un código no relacionado lo llame. (Debate este punto en los comentarios ...)
Como el método no accede a ningún campo de instancia, puede hacerse estático, al hacerlo estático, lo hace más fácil de entender y tal vez incluso un poco más rápido.
Entonces ... (Tal vez ahora, tal vez más tarde, tal vez nunca)
Una vez que el método se ha vuelto estático, está claro que se puede sacar de la clase, por ejemplo, a una clase de unidad.
También es fácil transformarlo en un método de instancia de uno de sus parámetros, a menudo aquí es donde debería estar el código.
fuente
Puedo pensar en al menos dos razones por las que necesitarías un método privado estático en una clase.
1: Sus instancias tienen motivos para llamar a un método estático que no desea que se llame directamente, quizás porque comparte datos entre todas las instancias de su clase.
2: Sus métodos estáticos públicos tienen subrutinas a las que no desea que se llame directamente. El método todavía se llama sin una instancia, solo que no directamente.
Por supuesto, "ayuda a que la clase tenga sentido" es una buena razón por sí sola.
fuente
En general, si encuentro que estoy escribiendo métodos estáticos privados, lo tomo como una indicación de que hay algo que debería haber modelado por separado.
Dado que no están vinculados al estado de una instancia de objeto particular, una colección de métodos estáticos públicos y privados podría formar una clase completamente separada con sus propios métodos semánticos y no estáticos.
(Otro consejo es que si encuentro que tengo muchos métodos estáticos (públicos y privados) que tienen un parámetro común de algún tipo, podrían ser mejores como miembros de ese tipo).
Entonces, para responder a su pregunta, los métodos estáticos privados aparecen cuando una clase proporciona un grupo de métodos relacionados que son independientes de una instancia de esa clase. (... y como son independientes, pueden estar mejor en su propia clase).
fuente
Un ejemplo muy simple en el que puedo pensar es, si quieres hacer algún procesamiento en los argumentos de entrada (o alguna manipulación) que se pasan a la función principal. Por lo tanto, en este caso, si el procesamiento es grande y la misma funcionalidad no se usará en ningún otro lugar, tendrá sentido tener una función privada, ya que no se usará / invocará desde otro lugar + estático, ya que main es estático.
fuente