Je lisais et je mettais en œuvre des scénarios à travers l'énum. J'ai compris que nous pouvons créer un énum
Sans exemple. Quelle est l'utilisation pratique d'un tel Enum code>? Deuxièmement, Enum code> peut également implémenter
Une interface, mais ne peut évidemment pas étendre une classe car elle étend déjà la classe Enum code>. Quels sont les avantages pratiques de la création d'un Enum code> sans instances?
BEN P>
3 Réponses :
Membres Zero-Member est en fait un CLASSE UTILITY EM> IDIOM utilisé par un certain segment de la communauté Java (notamment Peter Lawrey ). Ils sont les plus concis, et sans doute le moyen le plus propre de garantir que la classe ne peut pas être instanciée ou sous-classée. P>
Naturellement, vous n'aurez aucun instance em> dans une telle énorme; Seuls les statiques. P>
Pouvez-vous donner un exemple d'où quelque chose comme ça est fait? Je peux penser à beaucoup d'où une classe normale est utilisée (par exemple java.lang.math code>), mais je ne pense pas avoir jamais vu cela.
Mais il apparaît alors dans la section Enum code> du Javadoc, qui n'est pas nécessairement là que vous le chercheriez. Une classe finale (pour clarté) + constructeur privé est imo l'idiome standard pour un tel cas d'utilisation (bien qu'il soit fonctionnellement équivalent). C'est ce qui est typiquement fait dans le JDK (y compris 8).
@arshajii maths code> est beaucoup trop vieux pour être un Enum code>.
"Bien connu": Pouvez-vous fournir un exemple / référence pour valider cette réclamation? Je n'ai jamais vu un énumé utilisé de cette façon.
@damo je pourrais être biaisé, j'admets. J'ai lu Blog de Peter Lawrey A > Sur le sujet il y a longtemps il y a longtemps, alors cet idiome m'a grandi.
Je vais également admettre que, j'ai vu ce concept quelque part sur le blog qu'une énorme instance peut être utilisée comme classe d'utilité. Mais je veux toujours savoir quel genre de classe d'utilité. Pour une telle classe d'utilité n'est pas assez de classe statique normale. Pourquoi quelqu'un irait-il avec Enum dans ce cas?
@benz parce qu'il est plus concis, ce qui n'est pas du tout à peu près le nombre de caractères: juste en voyant le mot Enum code> Vous pouvez immédiatement être assuré que cette classe répond à toutes les exigences des classes utilitaires: pas de sous-classement, Aucune instanciation. Il s'agit de Charge mentale i> placée sur le programmeur. Lorsque chaque morceau de code de projet est béni avec une telle grâce, l'effet global est bien au-delà de subtil.
C'est correct, je suis d'accord avec votre concept à coup sûr. Sur la base la plus logique, il semble une solution parfaite.
Donc, Lawrey a montré deux façons d'abuser Enum code> :) Qui se soucie de quelqu'un sous-classes math code> ou instancie un objet code> maths. Il existe des classes utilitaires pouvant être sous-classées et insnitaisées et elles n'ont jamais causé de problème. Par exemple: haricots, modificateur, URLECODER code>. (mais pas urlencoder, lol)
Je me souviens quand j'ai suggéré d'utiliser Enums en tant que cours utilitaires, c'était tellement de haine ... Les gens changent-ils?
@kan Oui, les gens de nombreuses fois ne peuvent distinguer leurs croyances religieuses de la vérité objective. Il était une fois une fois, quelqu'un a probablement argumenté "Comment pouvez-vous faire une classe qui ne peut pas être instancié? Une classe est un modèle pour faire des objets et toute autre utilisation de celui-ci est un une odeur de la transaction i> et d'une odeur de code clair" . Eh bien, les temps ont changé pour ces personnes.
Marko: Une idée soignée sur l'énum, et je suis content que j'en ai appris ici ici, donc je le reconnaîtrai au futur code. Mais je ne vois pas de "I> problème i> avec instanciation ou même sous-classement d'une classe qui est toute la statique, comme les mathématiques. Pouvez vous donner un exemple?
@ user949300 il n'y a pas de problème; Il s'agit de transporter des intentions.
Enum code> sont des types de référence comme Classe code> ou interfaces code>. Cela signifie que vous pouvez
Eh bien adapte le principe " Programme à l'interface et à la mise en œuvre" << / a>. p>
membres d'un est-il également possible qu'un Enum code> n'est pas nécessairement fixé avant la fin de l'univers. Vous pouvez ajouter de nouveaux membres sans briser la comparabilité binaire. Je peux donc imaginer qu'un Enum code> est créé pour modéliser un concept qui n'a aucun cas à l'heure actuelle, mais peut en avoir ajouté plus tard. P>
enum code> est créé pour un concept que nous savons définitivement aucun cas? Par exemple Enum negatvenaturalnumber {} code>? Pourrait-il servir de but dans un programme? Qui sait, on ne peut pas dire avec certitude. P>
Oh de cette manière. Mais de nombreux intervieweurs posent cette question. S'il n'y en a pas, pourquoi Java le permettrait-il de le permettre? Quelque part peut être utilisé, nous n'en sommes pas au courant.
Voir aussi: Stackoverflow.com/a/14900526/829571