Je viens de découvrir que Java permet aux énumérations d’implémenter une interface. Ce qui serait une affaire de bon usage pour cela ?
Réponses
Trop de publicités?Les enums ne suffit représenter les ensembles passifs (p. ex. les couleurs). Ils peuvent représenter des objets plus complexes avec la fonctionnalité, et donc vous risquez alors de vouloir ajouter d’autres fonctionnalités à ces - par exemple vous pouvez avoir des interfaces telles que ,
etc. et composants prenant en charge ceux-ci.
Le exemple donné par plusieurs personnes ici ne va pas, depuis
qui implémente déjà. Vous ne pouvez pas l’ignorer même.
Un meilleur exemple est d’avoir une interface qui définit, disons, un type de données. Vous pouvez avoir un enum implémente les types simples et ont des classes normales pour implémenter des types complexes :
Depuis les Énumérations peuvent implémenter des interfaces ils peuvent être utilisés pour la stricte application du pattern singleton. En essayant de faire une classe standard un singleton permet...
- la possibilité d'utiliser des techniques de réflexion pour exposer les méthodes privées comme publiques
- pour hériter de votre singleton et dominante de votre singleton méthodes avec quelque chose d'autre
Les énumérations comme des singletons aider à prévenir ces problèmes de sécurité. Cela aurait été l'un des contributeurs de raisons de laisser les Énumérations agir en tant que classes et d'implémenter des interfaces. Juste une supposition.
Voir http://stackoverflow.com/questions/427902/java-enum-singleton et http://stackoverflow.com/questions/2111768/singleton-class-in-java pour plus de discussion.
Il est nécessaire pour l'extensibilité -- si quelqu'un utilise une API que vous avez développé, les énumérations, vous définissez sont statiques; ils ne peuvent pas être ajoutés ou modifiés. Toutefois, si vous le permettez implémenter une interface, la personne à l'aide de l'API peuvent développer leurs propres enum à l'aide de la même interface. Vous pouvez ensuite enregistrer cette enum avec un enum gestionnaire des conglomérats les énumérations avec l'interface standard.
Edit: @Méthode d'aide a l'exemple parfait de cela. Penser à avoir d'autres bibliothèques de définir de nouveaux opérateurs et ensuite à un gestionnaire de classe que "hey, c'enum existe-enregistrer'. Sinon, vous ne être en mesure de définir des Opérateurs dans votre propre code, il n'y aurait pas d'extensibilité.