2009-05-16 10 views

Répondre

12

Pas vraiment dans la programmation java régulière. Mais si vous travaillez beaucoup avec l'injection de dépendance, vous avez probablement peu ou pas de méthodes statiques du tout. Dans un tel contexte, il est assez fréquent d'avoir seulement quelques classes d'utilitaires avec des méthodes statiques, et aucune autre méthode statique.

-1

Je suppose que pas spécialement quand il s'agit de singletons.

8

Non, ce n'est pas faux. Par exemple, une utilisation courante consiste à avoir des méthodes d'usine statiques dans une définition de classe.

4

Je pense que c'est bien de créer des classes d'utilitaires statiques, surtout quand vous n'êtes pas vraiment sûr (encore) de ce que le design devrait être, parce que vous apprenez toujours sur le domaine du problème.

La statique est un marqueur «pas encore conçu correctement». Souvent, la solution statique est parfaitement adéquate; mais parfois, au fur et à mesure que le projet progresse, vous trouvez que vous devez réécrire cette «partie entière», mais vous avez (à ce stade ultérieur) une compréhension beaucoup plus complète du domaine du problème et êtes donc en mesure de concevoir un "bonne solution" à ces problèmes. Je pense que les programmeurs nous martèlent injustement à propos de "retravailler". Vous devez faire le travail afin de comprendre le travail assez bien pour faire le travail correctement. Je ne vois aucun moyen de passer cette prise 22;

Je peux citer de nombreux exemples de statique de l'API principale. java.lang.Math, java.util.Arrays, java.util.Collections. MAIS veuillez noter que ces classes sont des "utils classes" qui existent uniquement pour fournir un tas de méthodes statiques. À mon humble avis, la présence de méthodes statiques dans un «objet stateful» est juste suppliant d'être refactorisé. Je pense que les concepteurs d'API aimeraient être en mesure de diviser Integer (et les autres classes wrapper) ... MAIS ils sont bel et bien coincés avec ce qu'ils ont. Ce qui est un avertissement en soi ... que static implique final, et il y a une bonne raison pour que (contrairement au C++) les méthodes java puissent être remplacées par défaut. Statique est intrinsèquement plus "contraignant" que non statique ... en bas de l'astuce, vous ne pouvez pas adapter les implémentations à différentes situations, contextes, etc, etc.,

Cheers. Keith

+0

Dans les "objets avec état", comment avez-vous tendance à refactoriser les méthodes statiques - les déplacer dans des classes d'aide/d'utilité ou simplement les rendre non statiques? (Que diriez-vous des méthodes d'aide privées - les rendriez-vous non statiques indépendamment du fait qu'elles utilisent des champs d'instance?) – Jonik

+0

Si une méthode ne nécessite pas d'état, la dernière chose que je ferais, étant un mannequin auto-confessé, est de lui donner accès Je devais m'inquiéter de l'état de la classe tout en lisant/écrivant/éditant cette méthode (qui pourrait être un gros morceau). Je préfère diviser les classes en «stateful» et Helper. Témoin de mon projet C# actuel. Un GmlReader (google GML) est une classe d'utils statique avec une méthode publique: public static IGeometry ReadGeometry (lecteur XmlReader) ...beaucoup de gens mélangent sérialiser et désérialiser dans le DTO qui ne s'adapte pas bien à plusieurs formats. Juste comment je le fais. YMMV. – corlettk

0

Je crois que c'est une mauvaise idée d'avoir des méthodes statiques et non statiques dans la même classe avec le même nom. Cela peut être très déroutant. Je suggère d'essayer de rendre les noms différents dans ce cas.

De même, ne créez pas de méthodes avec le même nom mais des cas différents, ou des méthodes portant le même nom que la classe de la même classe. Les deux sont légaux, et se produisent même dans le JDK, mais sont confondants IHMO.

Questions connexes