如何在Java中复制此C ++枚举开关?

时间:2010-12-09 11:29:57

标签: java c++ enums switch-statement

我有一些看起来像这样的C ++代码:

enum {
     FOO = 0x01,
     BAR = 0x09;
};

switch (baz) {
     case FOO:
     {
          //...
     }
     break;
     case BAR:
     {
          //...
     }
     break;
}

是否可以在Java中复制此行为?

6 个答案:

答案 0 :(得分:4)

是的,Java有枚举:

public enum BazEnum {
    FOO(0x01),
    BAR(0x09);

    private int value;

    BazEnum(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public static BazEnum fromValue(int value) {
        for (BazEnum curenum : BazEnum.values()) {
            if (curenum.getValue() == value) {
                return curenum;
            }
        }
        return null;
    }
}

public class MainClass {
    public static void main(String[] params) {
        BazEnum baz = BazEnum.fromValue(0x09);

        switch baz {
            case FOO:
                ...
                break;
            case BAR:
                ...
                break;
            default:
                ...
                break;
        }
    }
}

答案 1 :(得分:1)

查看Java Tutorial on Enum Types,其中包含构建枚举的示例,并在switch语句中使用它们。

答案 2 :(得分:0)

当然,只需给枚举一个名字:

enum Baz
{
    FOO, BAR;
}

然后您可以切换Baz类型的表达式:

    switch (baz)
    {
    case FOO:
        {

        }
        break;

    case BAR:
        {

        }
        break;
    }

如果您愿意,仍然可以将FOOBAR与值1和9相关联:

enum Baz
{
    FOO(0x01), BAR(0x09);

    Baz(int value)
    {
        this.value = value;
    }

    public final int value;
}

然后您可以说baz.value来获取相关值。

答案 3 :(得分:0)

public enum Enum{
     FOO(0x01),
     BAR(0x09);

     Enum(int value){
         this.value=value;
     }
     private int value;
};

public void test() {
    Enum testEnum = null;
    switch(testEnum){
        case FOO:{}break;
        case BAR:{}break;
    }
}

答案 4 :(得分:0)

虽然Java有枚举,但它们是对象而不是原始对象。使用常量

可能更简单
static final int 
    FOO = 0x01,
    BAR = 0x09;

switch (baz) {
     case FOO:
          //...
          break;
     case BAR:
          //...
          break;
}

答案 5 :(得分:-1)

只需创建一个枚举xDD

public enum EnumName
{
  Foo(),Bar();
} 

switch (baz)
{
   case : EnumName.Foo
    code
    break;
}