关于Java:用Java1.6中的字符串进行切换switch

Switch with string in Java1.6

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Switch Statement with Strings in Java

我在使用下面的代码,我想知道是否有一种方法可以用开关来完成它,因为类型名是类型字符串,所以我不将其用作默认值。(我知道1.7版本支持此选项,但我需要使用1.6)有办法克服这个问题吗?

1
2
3
4
5
6
7
8
9
10
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"));


如其他答案所解释的,如果您使用Java 1.6,则不能使用带有字符串的开关语句。

最好的做法是使用枚举器而不是字符串值:

1
2
3
4
5
6
7
8
9
10
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"));
    }
}

在哪里?

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

更新:

在您的Field类中,添加一个InputType fieldType属性。然后在循环内部:

1
MemberTypeRouting.switchInput(field.getFieldType());


只有Java 7才支持使用字符串的开关。遗憾的是,它在旧版本中不被支持,所以不能用Java 6来使用它,而必须继续使用已经使用的I/OR语句。

另请看几年前问的这个问题:为什么我不能打开一根绳子?