2013-01-24 4 views
2

Possible en double:
Switch Statement with Strings in Javacommutateur avec chaîne dans Java1.6

Im en utilisant le code suivant et je me demande s'il y a un moyen de le faire avec interrupteur, la raison que je ne l'utilise pas par défaut puisque le nom du type est type string. (Je sais que cette option est supportée dans la version 1.7 mais j'ai besoin d'utiliser 1.6) Il existe un moyen de surmonter ce problème?

public static SwitchInputType<?> switchInput(String typeName) { 

     if (typeName.equals("Binary")) { 
      return new SwitchInputType<Byte>(new Byte("23ABFF")); 
     } 
     else if (typeName.equals("Decimal")) { 
      return new SwitchInputType<BigDecimal>(new BigDecimal("A")); 
     } 
     else if (typeName.equals("Boolean")) { 
      return new SwitchInputType<Boolean>(new Boolean("true")); 
+5

Oui, vous pouvez le faire avec la valeur hors comme expliqué ici http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java – Nick

+0

http : //stackoverflow.com/a/338230/637889 a une section ** Avant JDK 7 ** avec un exemple utilisant le type 'enum' – andyb

+0

En fait cette réponse est le – Andremoniy

Répondre

3

Comme expliqué dans d'autres réponses, vous ne pouvez pas utiliser l'instruction switch avec des chaînes si vous travaillez avec Java 1.6.

La meilleure chose à faire est d'utiliser un recenseur au lieu des valeurs de chaîne:

public static SwitchInputType<?> switchInput(InputType type) { 
    switch(type){ 
     BINARY: 
      return new SwitchInputType<Byte>(new Byte("23ABFF")); 
     DECIMAL: 
      return new SwitchInputType<BigDecimal>(new BigDecimal("A")); 
     BOOLEAN: 
      return new SwitchInputType<Boolean>(new Boolean("true")); 
    } 
} 

où:

public enum InputType{ 
    BINARY, DECIMAL, BOOLEAN // etc. 
} 

MISE À JOUR:

Dans votre classe Field ajouter un InputType fieldType propriété. Ensuite, à l'intérieur de la boucle:

MemberTypeRouting.switchInput(field.getFieldType()); 
+0

Merci mais ici vous écrivez BINARY, DECIMAL, BOOLEAN en majuscule et je devrais obtenir le Booléen Binaire et etc ... En plus, je reçois des chaînes comme Edm.Int16 Edm.Boolean etc alors comment dois-je gérer? –

+0

Si vous ne pouvez pas modifier votre code en remplaçant les valeurs de chaîne retournées par des valeurs enum, vous ne pouvez pas utiliser l'instruction switch ... – davioooh

+0

Si je veux le faire, comment dois-je essayer? –

2

commutateurs avec des chaînes ne sont pris en charge depuis Java 7. Malheureusement, il n'a pas été pris en charge dans les anciennes versions, donc vous ne pouvez pas l'utiliser wit Java 6, et vous devez rester avec les if/else vous êtes utilise déjà.

Voir aussi cette question, a posé quelques années: Why can't I switch on a String?

+0

en double ce qui signifie que j'ai besoin de créer classe (ENUN) avec toutes les valeurs attendues et que de les demander? –