切换java 1.6的类型字符串

Joh*_*rby 5 java switch-statement

我有以下代码,我想知道是否有办法使用开关块而不是一堆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"))
Run Code Online (Sandbox Code Playgroud)

Old*_*eon 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) {
    }
}
Run Code Online (Sandbox Code Playgroud)


Jul*_*les 6

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

例:

enum TypeName { Boolean, Double, Int32 }

switch (TypeName.valueOf(typeName)) {
   case Boolean: // ...
   case Double: // ...
   case Int32: // ...
}
Run Code Online (Sandbox Code Playgroud)