¿Por qué tienen métodos estáticos privados?

62

Sólo 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?

Habría pensado que una ventaja de tener un método estático es que puede ser invocado sin una instancia de una clase, pero dado que es privado, ¿hay algún punto en que sea estático?

La única razón por la que puedo pensar es que ayuda a comprender conceptualmente el método en el nivel de clase en lugar del nivel de objeto.

    
pregunta Rehan Naqvi 01.04.2014 - 16:11

7 respuestas

65

La característica de ser estático es independiente de la visibilidad.

Las razones por las que deseará tener un método estático (algunos códigos que no dependen de miembros no estáticos) seguirán siendo útiles. Pero tal vez usted no quiera que nadie / cualquier otra cosa lo use, solo su clase.

    
respondido por el Miyamoto Akira 01.04.2014 - 16:20
26

Una razón bastante común (en Java) sería para inicializar variables de campo inmutables en un constructor utilizando un método simple private static para reducir el desorden de constructores.

  • Es private : las clases externas no deberían verlo.
  • Es static : puede realizar alguna operación, independientemente 1 del estado de la clase de host.

Un ejemplo un tanto artificioso sigue ...

por ejemplo:

public class MyClass{
    private final String concatenated;

    public MyClass(String a, String b){
        concatenated = concat(a,b);
    }

    public String getConcatenated(){
       return concatenated;
    }

    /**
    *  Concatenates two Strings as 's1---s2'
    **/
    private static final String concat(String s1, String s2){
        return String.format("%s---%s", s1, s2);
    }
}

1 Suponiendo que no tiene interacción con otras variables static .

    
respondido por el Sheldon Warkentin 01.04.2014 - 17:14
12

Un caso de uso común para un método private static es un método de utilidad que es

  1. solo es usado por esa clase
  2. es independiente del estado interno de esa clase
respondido por el Philipp 01.04.2014 - 18:46
10

Usted ve 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.

Usted hace que el método sea privado ya que no está diseñado para un uso generalizado y no quiere que el 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 ser estático, al hacerlo estático, lo hace más fácil de entender y quizás incluso un poco más rápido.

Luego .... (Quizás ahora, quizás más tarde, tal vez nunca)

Una vez que el método se ha vuelto estático, es 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.

    
respondido por el Ian 01.04.2014 - 18:17
2

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 al que no desea llamar directamente, tal vez porque comparte datos entre todas las instancias de su clase.

2: Sus métodos estáticos públicos tienen subrutinas que no desea que se llamen directamente. El método aún se llama sin una instancia, simplemente no directamente.

Por supuesto, "ayuda a la clase a tener sentido" es una buena razón por sí sola.

    
respondido por el DougM 01.04.2014 - 16:59
1

Generalmente, 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 en particular, una colección de métodos estáticos públicos y privados podría formar una clase completamente separada con su propia semántica & Métodos no estáticos.

(Otra sugerencia es que si encuentro muchos métodos estáticos (públicos y privados) que tienen algún parámetro común de algún tipo, es posible que estén mejor 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 dado que son independientes, pueden estar mejor en su propia clase.)

    
respondido por el Rob 01.04.2014 - 19:53
-1

Un ejemplo muy simple en el que puedo pensar es si desea realizar algún procesamiento en los argumentos de entrada (o alguna manipulación) que se pasan a la función principal. Entonces, en este caso, si el procesamiento es grande y la misma funcionalidad no se utilizará en ningún otro lugar, tendrá sentido tener una función privada, ya que no se utilizará / llamará desde ningún otro lugar + estática, ya que la principal es estática.

    
respondido por el techExplorer 08.04.2014 - 07:57

Lea otras preguntas en las etiquetas

Comentarios Recientes

¿Por qué Python tiene clases que solo existen en Python? No muchos consideran que es una mala idea compartir código desde dentro de una clase ... Lección aprendida Si se le proporciona el estado más reciente y puede probar la API del servicio GUI de tareas de mantenimiento heredado. Control administrativo personalizado usando la interfaz de usuario en diferentes ventanas Anwendung De muchas maneras (?) La forma en que debemos comenzar a escribir IUI es muy similar a los métodos. Pero no es la misma implementación... Lee mas