Est-ce mal d'avoir des méthodes statiques et non statiques dans la même classe?Est-ce mal d'avoir des méthodes statiques et non statiques dans la même classe?
Répondre
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.
Je suppose que pas spécialement quand il s'agit de singletons.
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.
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
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.
- 1. Threading à partir d'une classe avec des méthodes statiques et non statiques
- 2. F # Méthodes statiques Dans la classe
- 3. Méthodes statiques et sécurité des threads
- 4. Méthodes statiques fonctionnant sur des champs d'instance
- 5. F # Méthodes statiques privées
- 6. F # Méthodes statiques multilignes
- 7. Quels sont les inconvénients des méthodes statiques?
- 8. Sur les blocs d'initialisation statiques et non statiques en Java
- 9. Accès méthodes statiques sur une classe générique dans C#
- 10. Méthodes getClass() et statiques: Quelle est la meilleure pratique?
- 11. Mocking Méthodes statiques utilisant Rhino.Mocks
- 12. Comment se moquer des méthodes statiques?
- 13. Se moquer des méthodes statiques non publiques dans les classes abstraites avec JMockit?
- 14. Comment éviter l'erreur 'call is ambiguous ...' lors de l'écriture de méthodes statiques et non statiques en C#?
- 15. Activateur et classes statiques
- 16. Méta-programmation groovy - ajouter des méthodes statiques à Object.metaClass
- 17. PHP 5.2 Méthodes statiques virtuels comme
- 18. Performance de l'utilisation de méthodes statiques vs instanciation de la classe contenant les méthodes
- 19. Méthodes de simulation utilisées dans les méthodes statiques
- 20. Pourquoi la commande de méthode d'extraction dans Visual Studio crée-t-elle des méthodes statiques?
- 21. Initialisation en classe de données statiques non-intégrées
- 22. refactoring pour supprimer le code des méthodes statiques Odeur
- 23. Initialisateurs statiques dans bcel
- 24. Classes statiques avec l'iPhone
- 25. membres statiques et augmentation de la sérialisation
- 26. Recherches statiques dans NHibernate
- 27. C# réflexion et l'héritage des membres statiques
- 28. Regex pour trouver des variables statiques (non finales)
- 29. OSGI - appels de méthodes statiques à travers des bundles
- 30. nécessitant la présence de méthodes statiques en C#
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
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