Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 1.6的字符串类型开关_Java_Switch Statement - Fatal编程技术网

java 1.6的字符串类型开关

java 1.6的字符串类型开关,java,switch-statement,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.eq

我有下面的代码,我想知道是否有一种方法可以使用开关块而不是一堆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"))
}else if(typeName.equals(“布尔”)){
返回新的SwitchInputType(新的布尔值((字符串)memberValue));
}else if(typeName.equals(“Double”)){
返回新的SwitchInputType(新的双精度((字符串)memberValue));
}else if(typeName.equals(“Int32”))

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

例如:

enum TypeName { Boolean, Double, Int32 }

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

将字符串映射到enum,因为enum可以在开关情况下使用。每个枚举都有一个valueOf(String)方法,该方法将字符串类型转换为枚举类型。然后您可以将此枚举与交换机内的各种情况相匹配。唯一需要注意的是字符串应该是要转换为枚举的有效标识符。如果字符串不是有效的标识符(即无法转换为枚举类型),则您可能会得到IllegalArgumentException

Ankur已经建议了一种方法。另一种方法是将它们定义为常量。 前 私有静态最终字符串BOOLEAN=“1”

开关(整数.parseInt(布尔)) 案例1:

案例2:


等等。

您甚至可以让
枚举为您执行以下操作:

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) {
    }
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
字符串typeName=“Boolean”;
字符串memberValue=“memberValue”;
SwitchInputType类型=type.valueOf(typeName).makeType(memberValue);
}
枚举类型{
布尔值{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新的布尔值(memberValue));
}
},
双重的{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新的Double(memberValue));
}
}, 
Int32{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新整数(memberValue));
}
};
//所有人都必须这样做。
抽象开关输入类型makeType(字符串成员值);
}
静态类开关输入类型{
公共开关输入类型(对象o){
}
}

@TGMCians但是有一种方法可以使用其他东西来完成这项工作,可能是静态的(不知道如何做)-1感谢你没有做基础研究。我只是在谷歌上搜索了一下,我发现有很多类似的问题。@Jules-cam你能提供一个例子吗?快速添加的例子——没有在编译器中尝试过,但它应该可以工作。谢谢,但是枚举是什么,我应该如何定义它?枚举应该在同一个类中还是不同的?我把它作为一个私有类ate在类中嵌套类使用它的代码位于+1中,以获得更面向对象的方法。谢谢,但代码没有进入抽象的SwitchInputType makeType(String memberValue);由于返回语句,我想这就是类型没有真正类型的原因?你知道我如何修复它吗?@johnjerby-对不起,我不理解你的问题。它不能进入
抽象
方法,那里没有代码。
抽象
方法是用来确保所有
枚举
都实现它的方法。
valueOf
调用的结果是一个
enum
,它有一个
makeType
方法,然后用
String
参数调用该方法。添加一些打印语句并运行代码-你会明白的。-1-EWWWW!太可怕了!这种方法有什么问题。我只是建议一种替代方法。s解决方案不正确。由用户决定选择枚举与常量哪个选项。