【问题标题】:Switch with string in Java1.6 [duplicate]在Java1.6中用字符串切换[重复]
【发布时间】:2013-01-07 22:24:26
【问题描述】:

可能重复:
Switch Statement with Strings in Java

我正在使用以下代码,我想知道是否有办法使用 switch , 我不使用它作为默认值的原因,因为类型名称是类型字符串。(我知道这个选项在 1.7 版本中受支持,但我需要使用 1.6) 有办法解决这个问题吗?

public static SwitchInputType<?> switchInput(String typeName) {

        if (typeName.equals("Binary")) {
            return new SwitchInputType<Byte>(new Byte("23ABFF"));
        }
        else if (typeName.equals("Decimal")) {
            return new SwitchInputType<BigDecimal>(new BigDecimal("A"));
        }
        else if (typeName.equals("Boolean")) {
            return new SwitchInputType<Boolean>(new Boolean("true"));

【问题讨论】:

标签: java switch-statement java-6


【解决方案1】:

如其他答案中所述,如果您使用的是 Java 1.6,则不能将 switch 语句与字符串一起使用。

最好的办法是使用枚举器而不是字符串值:

public static SwitchInputType<?> switchInput(InputType type) {
    switch(type){
        BINARY:
            return new SwitchInputType<Byte>(new Byte("23ABFF"));
        DECIMAL:
            return new SwitchInputType<BigDecimal>(new BigDecimal("A"));
        BOOLEAN:
            return new SwitchInputType<Boolean>(new Boolean("true"));
    }
}

地点:

public enum InputType{
    BINARY, DECIMAL, BOOLEAN // etc.
}

更新:

在您的 Field 类中添加一个 InputType fieldType 属性。然后在循环内部:

MemberTypeRouting.switchInput(field.getFieldType());

【讨论】:

  • 谢谢,但在这里你用大写字母写 BINARY,DECIMAL,BOOLEAN,我应该得到类似的 Boolean Binary 等......此外,我得到像 Edm.Int16 Edm.Boolean 等这样的字符串,那么应该如何我处理?
  • 如果你不能改变你的代码用枚举值替换返回的字符串值,你不能使用 switch 语句...
  • 如果我想做,我应该怎么做?
  • 你能发布返回这些typeName字符串的方法的代码吗?
  • for (Field field : declaredFields) { String memberName = field.getName(); witchInputType> switchInput = MemberTypeRouting.switchInput(fieldTypeName
【解决方案2】:

仅从 Java 7 开始支持带有字符串的开关。遗憾的是,旧版本不支持它,因此您不能在 Java 6 中使用它,您必须继续使用您已经在使用的 if/else 语句。

另请参阅几年前提出的这个问题: Why can't I switch on a String?

【讨论】:

  • 我需要创建具有所有预期值的类(ENUN)而不是要求它们是什么意思?
猜你喜欢
  • 2018-11-26
  • 2023-03-21
  • 2012-02-10
  • 2015-10-20
  • 2021-12-19
  • 1970-01-01
  • 2011-10-10
  • 2017-01-18
  • 1970-01-01
相关资源
最近更新 更多