Je voulais juste éclaircir une question que j'ai. Quel est l'intérêt d'avoir une méthode statique privée par opposition à une méthode normale avec visibilité privée?
J'aurais pensé qu'un avantage à avoir une méthode statique, c'est qu'elle peut être appelée sans instance de classe, mais étant donné que sa méthode privée a-t-elle le même sens d'être statique?
La seule raison pour laquelle je peux penser est que cela aide à comprendre conceptuellement la méthode au niveau classe par opposition au niveau objet.
object-oriented
class
methods
static-methods
access-modifiers
Rehan Naqvi
la source
la source
Réponses:
La caractéristique d'être statique est indépendante de la visibilité.
Les raisons pour lesquelles vous souhaiterez une méthode statique (un code qui ne dépend pas de membres non statiques) seront toujours utiles. Mais peut-être que vous ne voulez pas que quelqu'un / n'importe quoi d'autre l'utilise, juste votre classe.
la source
<
à<
, etc. Quand il est écrit ...&
à&
[j'étais en train d' écrire le code, je convertir&
à&
même si je ne pensais pas qu'il soit nécessaire, mais supposons ce n'est pas]. Il devient plus tard nécessaire de gérer esperluette, mais la méthode est publique, changer d'étendre&
à&
pourrait casser le code externe qui effectue sa propre&
-à-&
substitution. Si la méthode est privée, cependant, elle pourrait être corrigée pour gérer&
sans causer de problèmes pour tout code extérieur.Une raison assez courante (en Java) serait d’initialiser des variables de champ immuables dans un constructeur en utilisant une
private static
méthode simple pour réduire l’encombrement du constructeur.private
: les classes externes ne devraient pas le voir.static
: il peut effectuer une opération indépendante 1 de l'état de la classe d'accueil.Un exemple quelque peu artificiel suit ...
par exemple:
1 En supposant qu'il n'interagisse pas avec d'autres
static
variables.la source
super(...)
appel doit être la première ligne du constructeur de votre classe. Vous ne pouvez donc pas déclarer de variables locales pour vous aider à déterminer ce qu'il convient de transmettre au super appel. Cependant, vous pouvez appeler des méthodes statiques (privées), qui utilisent autant de lignes que nécessaire pour déterminer la valeur à transmettre au super constructeur.Un cas d'utilisation courant pour une
private static
méthode est une méthode utilitaire qui estla source
Vous voyez que vous avez quelques lignes de code qui sont répétées dans beaucoup de vos méthodes, vous décidez donc de les extraire en une seule méthode, car le code dupliqué n'est pas bon.
Vous rendez la méthode privée car elle n'est pas conçue pour une utilisation généralisée et vous ne voulez pas que du code non lié l'appelle. (Débattez ce point dans les commentaires….)
Comme la méthode n’accède à aucun champ d’instance, elle peut être rendue statique. En la rendant statique, vous la rendre plus facile à comprendre et peut-être même un peu plus rapidement.
Puis .... (Peut-être maintenant, peut-être plus tard, peut-être jamais)
Une fois que la méthode est devenue statique, il est clair qu’elle peut être déplacée hors de la classe, par exemple dans une classe unitaire.
Il est également facile de le transformer en une méthode d’instance d’un de ses paramètres, c’est souvent là que le code devrait être.
la source
Je peux penser à au moins deux raisons pour lesquelles vous auriez besoin d'une méthode privée statique sur une classe.
1: Vos instances ont des raisons d'appeler une méthode statique que vous ne voulez pas appeler directement, peut-être parce qu'elle partage des données entre toutes les instances de votre classe.
2: Vos méthodes statiques publiques ont des sous-programmes que vous ne voulez pas appeler directement. La méthode est toujours appelée sans instance, mais pas directement.
Bien sûr, "cela aide la classe à comprendre" est une bonne raison en soi.
la source
Généralement, si je découvre que j'écris des méthodes statiques privées, je le prends comme une indication qu'il y aurait quelque chose que j'aurais dû modéliser séparément.
Comme elles ne sont pas liées à l'état d'une instance d'objet particulière, une collection de méthodes statiques privées et publiques peut former une classe entièrement séparée avec sa propre sémantique et ses méthodes non statiques.
(Un autre conseil est que, si j'ai plusieurs méthodes statiques (publiques et privées) qui ont toutes un paramètre commun, elles pourraient être meilleures en tant que membres de ce type.)
Ainsi, pour répondre à votre question, des méthodes statiques privées apparaissent lorsqu'une classe fournit un groupe de méthodes liées indépendantes d'une instance de cette classe. (... et puisqu'ils sont indépendants, ils seront peut-être mieux dans leur propre classe.)
la source
Voici un exemple très simple, si vous souhaitez effectuer un traitement sur des arguments d'entrée (ou une manipulation) qui sont passés à la fonction principale. Donc, dans ce cas, si le traitement est volumineux et que les mêmes fonctionnalités ne seront utilisées nulle part ailleurs, il sera logique d’avoir une fonction privée, car elle ne sera pas utilisée / appelée de nulle part ailleurs + static car main est statique.
la source