Eu só queria esclarecer uma pergunta que tenho. Qual o sentido de ter um método estático privado em oposição a um método normal com visibilidade privada?
Eu teria pensado que uma vantagem de ter um método estático é que ele pode ser chamado sem uma instância de uma classe, mas já que seu particular existe um ponto em que ele é estático?
A única razão pela qual consigo pensar é que ajuda a entender conceitualmente o método no nível da classe, em oposição ao nível do objeto.
object-oriented
class
methods
static-methods
access-modifiers
Rehan Naqvi
fonte
fonte
Respostas:
A característica de ser estático é independente da visibilidade.
Os motivos pelos quais você deseja ter um método estático (algum código que não depende de membros não estáticos) ainda serão úteis. Mas talvez você não queira que mais ninguém use, apenas a sua turma.
fonte
<
a<
, etc. Quando está escrito ...&
em&
[se eu estivesse escrevendo o código, eu converteria&
em&
mesmo que não esperasse que fosse necessário, mas suponha não faz]. É que mais tarde se torna necessário para lidar com ampersands, mas o método é público, alterá-lo para expandir&
a&
poderia quebrar o código externo que executa sua própria&
Para-&
substituição. Se o método for privado, no entanto, ele poderá ser corrigido para lidar&
sem causar problemas para qualquer código externo.Um motivo bastante comum (em Java) seria a inicialização de variáveis de campo imutáveis em um construtor, usando um
private static
método simples para reduzir a confusão de construtores.private
: classes externas não devem vê-lo.static
: ele pode executar alguma operação, independente 1 do estado da classe host.Um exemplo um tanto artificial segue ...
por exemplo:
1 Supondo que não haja interação com outras
static
variáveis.fonte
super(...)
chamada deve ser a primeira linha do construtor da sua classe, portanto você não pode declarar variáveis locais para ajudá-lo a descobrir o que deve ser passado para a super chamada. No entanto, você pode chamar métodos estáticos (privados), que usam quantas linhas são necessárias para calcular o valor a ser transmitido ao super construtor.Um caso de uso comum para um
private static
método é um método utilitário que éfonte
Você percebe que possui algumas linhas de código repetidas em muitos dos seus métodos; portanto, decide extraí-las para um único método, pois o código duplicado não é bom.
Você torna o método privado, pois não foi projetado para uso amplo e não deseja que um código não relacionado o chame. (Debata esse ponto nos comentários…)
Como o método não acessa nenhum campo de instância, ele pode tornar-se estático, tornando-o estático para facilitar o entendimento e talvez até um pouco mais rápido.
Então .... (Talvez agora, talvez mais tarde, talvez nunca)
Depois que o método se torna estático, fica claro que ele pode ser movido para fora da classe, digamos, para uma classe unity.
Também é fácil transformá-lo em um método de instância de um de seus parâmetros; geralmente é aqui que o código deve estar.
fonte
Posso pensar em pelo menos duas razões pelas quais você precisaria de um método privado estático em uma classe.
1: Suas instâncias têm motivos para chamar um método estático que você não deseja chamar diretamente, talvez porque compartilhe dados entre todas as instâncias da sua classe.
2: Seus métodos estáticos públicos têm sub-rotinas que você não deseja chamar diretamente. O método ainda é chamado sem uma instância, apenas não diretamente.
Obviamente, "isso ajuda a classe a fazer sentido" é uma boa razão por si só.
fonte
Geralmente, se eu descobrir que estou escrevendo métodos estáticos privados, tomo como uma indicação de que há algo que eu deveria ter modelado separadamente.
Como eles não estão vinculados ao estado de uma instância de objeto específica, uma coleção de métodos estáticos públicos e privados pode formar uma classe totalmente separada com sua própria semântica e métodos não estáticos.
(Outra dica é se eu descobrir que tenho muitos métodos estáticos (públicos e privados) que possuem um parâmetro comum de algum tipo, eles podem ser melhores como membros desse tipo.)
Portanto, para responder sua pergunta, métodos estáticos privados aparecem quando uma classe fornece um grupo de métodos relacionados que são independentes de uma instância dessa classe. (... e, como são independentes, podem ser melhores em sua própria classe.)
fonte
Um exemplo muito simples que consigo pensar é: se você deseja processar alguns argumentos de entrada (ou alguma manipulação) que são passados para a função principal. Portanto, neste caso, se o processamento for grande e a mesma funcionalidade não for usada em nenhum outro lugar, fará sentido ter uma função privada, pois não será usada / chamada de nenhum outro lugar + estática, pois main é estática.
fonte