Java: `enum` vs `String` en tant que Paramètres
J'ai lu à travers les détails de la System
bibliothèques set
et get
méthodes encore les paramètres sont généralement des Chaînes.
Envisagez-vous de l'utilisation de String
que les paramètres de mauvaise pratique depuis l'inclusion de enum
?
Une meilleure alternative au minimum pourrait être public final String
, Non?
OriginalL'auteur Ande TURNER | 2008-11-10
Vous devez vous connecter pour publier un commentaire.
Je considère les Énumérations à être une meilleure approche que les Chaînes de caractères. Ils sont de type sécurisé et la comparaison est plus rapide que de comparer des Chaînes de caractères.
Comme un pré Java 1.5 alternative, vous pouvez utiliser le type-safe enum modèle proposé par Joshua Bloch dans son livre Efficace Java. Pour type-safe enums voir aussi http://www.javacamp.org/designPattern/enum.html
OriginalL'auteur Frank Grimm
Si votre ensemble de paramètres est limité et connu au moment de la compilation, l'utilisation
enum
.Si votre ensemble de paramètres est ouvert et inconnu au moment de la compilation, l'utilisation des chaînes de caractères.
OriginalL'auteur akuhn
Juste parce que vous déclarez une
public final String
comme quelque chose que vous attendez d'avoir passé dans une méthode en tant que paramètre, il n'y a rien me retient de passer à quelque chose que j'aime.À l'aide de
enum
s signifie que je ne peux pas créer mon propre objet de passer à, la protection, des deux côtés de la question. Le seul temps que je pense que vous devriez être à l'aide de Chaînes constantes au lieu de les énumérations, si vous avez besoin de prévoir de l'espace pour l'utilisateur d'étendre votre méthode pour activer la fonctionnalité de personnalisation...OriginalL'auteur Martin
Si vous faites référence au Système.setProperty(), System.getProperty(), ou d'un Système.la fonction getenv(), je pense que les Chaînes sont ici depuis l'ensemble des clés possibles est ouvert. Le paramètre clé correspond à une réelle texte/type de chaîne de valeur dans certains fichiers ou de les stocker quelque part.
Si vous avez fermé un ensemble de touches, je pense que les énumérations serait bien préférable.
Je pense que la distinction entre "fermé" claviers et "ouvrir" des claviers est le facteur le plus important ici. Si vous regardez une API avec des plugins chargés dynamiquement, les plugins peuvent contribuer fonctionnalités supplémentaires qui peuvent être accessibles via un paramètre de Chaîne, mais il serait plus difficile avec un enum.
OriginalL'auteur lycono
J'ai appris la "méthode de moindre surprise". Instinctivement, à l'aide de l'enum est la bonne chose. Je voudrais donc aller pour elle. Je suis sûr que le Java décideurs pensent de même.
Modifier: Excellente explication de POLS: http://benpryor.com/blog/2006/06/29/api-design-the-principle-of-least-surprise/
OriginalL'auteur Johannes Schaub - litb
Bien que l'utilisation des énumérations est de type sécurisé, la nécessité de la conversion de l'enum à la chaîne et vice versa, est assez fréquent. Et il n'y a aucune fonctionnalité intégrée de le faire en Java. Et vous finirez par la suite avec l'aide de valueOf() et toString(). Et à l'aide de cette approche sera pas très différent en utilisant des chaînes de caractères. Parce que vous aurez besoin pour gérer les situations où la chaîne ne peut pas être convertie Enum.
Si juste utiliser static final de chaînes de caractères est facile et est une pratique courante, autant que je sache.
Par exemple, vous aurez envie d'interagir avec un serveur à l'aide de certaines API. Vous aurez besoin de définir une méthode et une réponse comme Enum. Et puis vous aurez besoin d'ajouter toString et valueOf méthodes. Pourquoi ne pas utiliser des chaînes de caractères?
OriginalL'auteur Vanuan
L'utilisation de chaînes dans l'Api n'est pas une mauvaise pratique; c'est une mauvaise pratique de changement de l'Api juste parce que Java a désormais en charge les énumérations. De nouvelles Api, je suis d'accord avec ce que tout le monde dit.
OriginalL'auteur Martin v. Löwis