2013-01-24 63 views
2

可能重複:
Switch Statement with Strings in Java開關用繩子在Java1.6

進出口使用下面的代碼,我不知道是否有辦法帶開關做到這一點, 的原因我不使用它作爲默認,因爲類型名稱是類型字符串。(我知道這個選項在1.7版本支持,但我需要使用1.6) 有一種方法可以解決這個問題?

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

是的,你可以用值off做,因爲這裏解釋 http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java – Nick

+0

HTTP ://stackoverflow.com/a/338230/637889有一個**在JDK 7 **之前,有一個使用'enum'類型的例子 – andyb

+0

其實這個答案是重複的 – Andremoniy

回答

3

在其他的答案解釋,如果你正在使用Java 1.6工作,你不能使用串行中的開關語句。

做的最好的事情就是用枚舉,而不是字符串值:

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")); 
    } 
} 

其中:

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

UPDATE:

在你Field類添加一個InputType fieldType屬性。然後,在循環中:

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

謝謝,但在這裏你寫大寫BINARY,DECIMAL,BOOLEAN,我應該得到像布爾二進制等...此外,我得到字符串像Edm.Int16 Edm.Boolean等,所以我應該如何處理它? –

+0

如果你不能改變你的代碼,使用枚舉值替換返回的字符串值,你不能使用switch語句... – davioooh

+0

如果我想這樣做,我該如何嘗試? –

2

開關用繩子只支持從Java 7可悲的是它並沒有在舊版本的支持,所以你不能用它機智Java 6中,並且你必須留在if/else語句你已經在使用。

也看到這個問題,問了幾年前: Why can't I switch on a String?

+0

這是什麼意思,我需要創建類( ENUN)與所有期望的價值並且要求他們? –