Java 1.6的字符串类型开关

switch for type string for java 1.6

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

我有以下代码,我想知道是否有一种方法可以使用开关块而不是一堆if/else语句。我知道Java支持Java 1.7中的开关块中的字符串,但我仍然在使用Java 1.6:

1
2
3
4
5
6
7
8
9
} else if (typeName.equals("Boolean")) {

            return new SwitchInputType<Boolean>(new Boolean((String) memberValue));

        } else if (typeName.equals("Double")) {

            return new SwitchInputType<Double>(new Double((String) memberValue));

        } else if (typeName.equals("Int32"))


你甚至可以让EDOCX1[1]为你做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static void main(String[] args) throws InterruptedException {
    String typeName ="Boolean";
    String memberValue ="memberValue";
    SwitchInputType type = Type.valueOf(typeName).makeType(memberValue);
}

enum Type {
    Boolean {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Boolean>(new Boolean(memberValue));
        }
    },
    Double {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Double>(new Double(memberValue));
        }
    },
    Int32 {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Integer>(new Integer(memberValue));
        }
    };

    // All must do this.
    abstract SwitchInputType makeType(String memberValue);
}

static class SwitchInputType<T> {
    public SwitchInputType(Object o) {
    }
}


由于字符串都是有效的标识符,因此可以使用这些字符串作为项标签创建枚举,使用Enum.ValueOf(Class,String)(或将在枚举类中创建的类似valueOf(String)方法)转换为枚举类型的成员,然后根据该方法切换…

例子:

1
2
3
4
5
6
7
enum TypeName { Boolean, Double, Int32 }

switch (TypeName.valueOf(typeName)) {
   case Boolean: // ...
   case Double: // ...
   case Int32: // ...
}


Ankur已经提出了一种方法。另一种方法是将这些定义为常量。前-private static final string boolean="1";

开关(integer.parseint(boolean))案例1:…

案例2:…

等等。


将字符串映射到枚举,因为枚举可用于开关情况。每个枚举都有一个valueof(string)方法,该方法将字符串类型转换为枚举类型。然后可以将此枚举与开关内的各种情况匹配。唯一需要注意的是,字符串应该是要转换为枚举的有效标识符。如果字符串不是有效的标识符(即不能强制转换为枚举类型),则最终可能会得到IllegalArgumentException。