切换java 1.6的类型字符串

时间:2013-03-20 20:02:01

标签: java switch-statement

我有以下代码,我想知道是否有办法使用switch块而不是一堆if / else语句。我知道Java从Java 1.7开始支持交换机块中的字符串,但我仍在使用Java 1.6:

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

4 个答案:

答案 0 :(得分:8)

你甚至可以让enum为你做这件事:

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) {
    }
}

答案 1 :(得分:6)

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

切换

示例:

enum TypeName { Boolean, Double, Int32 }

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

答案 2 :(得分:0)

将您的String映射到枚举,因为枚举可用于切换案例。每个枚举都有一个 valueOf(String)方法将字符串类型转换为枚举类型。然后你可以将这个枚举与switch中的各种情况相匹配。您唯一需要注意的是String应该是要转换为枚举的有效标识符。如果字符串不是有效的标识符(即无法转换为枚举类型,那么您可能最终得到 IllegalArgumentException

答案 3 :(得分:0)

Ankur已经提出了一种方法。另一种方法是将它们定义为常量。 前 - private static final String BOOLEAN =&#34; 1&#34 ;;

开关(的Integer.parseInt(布尔)) 案例1:......

案例2:......

等等。