2010-11-27 7 views
1

Bonjour Salut, je connais Java depuis longtemps et j'ai récemment plongé dans le monde Java. En tant que développeur C# expérimenté, je trouve étrange d'utiliser Java enum. Par exemple, si je montre sur les éléments de la console tels que:quelle est la meilleure pratique de Java pour gérer les

public enum AdminOpertionFirstlayer 
{MANAGE_SUPPLY, 
MANAGE_CUSTOMERS_SERVICE, 
ORDERS_MANAGEMENT, 
REPORTING_OPRATIONES} 

Je trouve difficile de les écrire à l'utilisateur, parce que je dois définir de nouveaux varible

*AdminOpertionFirstlayer []adminOpertionFirstlayerArr = 
    AdminOpertionFirstlayer.values(); 

pour y parvenir :

for (int i = 0; i < adminOpertionFirstlayerArr.length; i++) { 
    String s = String.format("%d. %s", 
          i+1, 
          adminOpertionFirstlayerArr[i].toString()); 
    Screen.print(s); 
} 

AdminOpertionFirstlayer chosen= adminOpertionFirstlayerArr 
           [(Integer.parseInt(dataIn.readLine()))-1]; 

Mais je pense qu'il est une mauvaise pratique de déclarer sur *

  1. Existe-t-il une meilleure pratique (l'extension enum est une ...)?
  2. Y a-t-il TryParse disponible ou chaque fois que j'analyse je devrais essayer et attraper?

merci

EDIT

ne faites cela est compréhensible et lisible?

public enum MainMenuOptiones{ 

    ADMIN {public void secondLayerMenu(){ 
     Main.AdminSecondLayerMenu();}}, 

    CUSTOMER{public void secondLayerMenu(){ 
     Main.customerSecondLayerMenu();}}, 

    EXIT{public void secondLayerMenu(){ 
     System.exit(1);}}, 

    UNAPPLICABLE{public void secondLayerMenu(){ 
     Screen.printToScreen("chice doesnt exist try again");}}; 

    abstract public void secondLayerMenu(); 
} 

les phrphes est au lieu d'utiliser tout le mécanisme de commutation je peux utiliser

enumInstance.secondLayerMenu(); 
+1

Ne commencez pas par une majuscule pour les noms de variables. C'est déroutant car les noms commençant par une majuscule sont normalement des noms de classe. Voir [Conventions de code pour le langage de programmation Java] (http://www.oracle.com/technetwork/java/codeconv-138413.html). – Progman

Répondre

5

Vous pouvez utiliser Java de amélioré pour la boucle (et la valeur ordinale pour l'ENUM)

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) { 
    String s = String.format("%d. %s", operator.ordinal(), operator); 
    Screen.print(s); 
} 

Ensuite, vous pouvez utiliser la valeur ordinale pour recréer l'énumération:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.values()[(Integer.parseInt(dataIn.readLine()))]; 

Ou vous pouvez utiliser le nom:

for (AdminOperatorFirstLayer operator : AdminOperatorFirstLayer.values()) { 
    String s = String.format("%s. %s", operator.name(), operator); 
    Screen.print(s); 
} 

Ensuite, vous pouvez utiliser la valeur valueOf pour recréer l'ENUM:

AdminOperatorFirstLayer chosen = 
    AdminOperatorFirstLayer.valueOf(dataIn.readLine()]; 
+0

et comment dois-je l'analyser? ce n'est pas une solution ... et je n'existe pas dans ce contexte .. –

+0

Pas besoin de downvote sa réponse! Qu'est-ce qu'il y a pour lui? – trojanfoe

+0

Vous n'avez pas à effectuer l'étape intermédiaire de déclaration du tableau. 'AdminOperatorFirstLayer.values ​​() [Integer.parseInt (dataIn.readLine()) - 1]' fonctionnera, vous devrez entourer avec try/catch ou autrement valider l'entrée de l'utilisateur. Vous pouvez également afficher les énumérations à l'aide de la boucle for Michael incluse. –

1

La classe Enum<E> est la base pour toutes les énumérations en Java.

Il n'est pas nécessaire de déclarer une variable avec des valeurs, utilisez une boucle for for améliorée pour les imprimer si vous voulez que les utilisateurs lisent votre code source.

Généralement, vous souhaitez imprimer une chaîne localisée plutôt que le nom de l'énumération dans la source.

Il n'y a pas d'équivalent à TryParse, utilisez à la place AdminOpertionFirstlayer.valueOf(AdminOpertionFirstlayer.class, string) et récupérez l'exception IllegalArgumentException.

+0

pouvez-vous dire plus sur 1 , Je voudrais voir un exemple ou un lien et ensuite je comprendrais ce que vous voulez dire –

+0

Cliquez sur 'Enum ' dans la réponse et vous allez aux docs Java avec toutes les méthodes communes à tous les enums en Java. –

+0

J'ai de la difficulté à vous comprendre, il n'y a pas de C# donc Enum a juste valeur et classe comme son accessoire et ses méthodes pouvez-vous être plus précis? –

Questions connexes