6

我有以下代码,我想知道是否有办法使用 switch 块而不是一堆 if/else 语句。我知道 Java 从 Java 1.7 开始支持 switch 块中的字符串,但我仍在使用 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

4 回答 4

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) {
    }
}
于 2013-03-20T20:27:17.993 回答
6

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

例子:

enum TypeName { Boolean, Double, Int32 }

switch (TypeName.valueOf(typeName)) {
   case Boolean: // ...
   case Double: // ...
   case Int32: // ...
}
于 2013-03-20T20:07:04.637 回答
0

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

于 2013-03-20T20:15:03.617 回答
0

Ankur 已经提出了一种方法。另一种方法是将这些定义为常量。Ex - 私有静态最终字符串 BOOLEAN = "1";

switch(Integer.parseInt(BOOLEAN)) 案例 1:...

案例2:...

等等。

于 2013-03-20T20:23:56.707 回答