Как мне воспроизвести этот переключатель перечисления C ++ в Java? - PullRequest
1 голос
/ 09 декабря 2010

У меня есть некоторый код C ++, который выглядит следующим образом:

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

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

Возможно ли повторить это поведение в Java?

Ответы [ 6 ]

4 голосов
/ 09 декабря 2010

Да, в 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 голос
/ 09 декабря 2010

Взгляните на Java-учебник по типам перечислений , в котором приведены примеры построения перечислений и их использования в операторах switch.

0 голосов
/ 09 декабря 2010

Хотя в Java есть enum, они являются объектами, а не примитивами. Может быть проще просто использовать константы

static final int 
    FOO = 0x01,
    BAR = 0x09;

switch (baz) {
     case FOO:
          //...
          break;
     case BAR:
          //...
          break;
}
0 голосов
/ 09 декабря 2010
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;
    }
}
0 голосов
/ 09 декабря 2010

Конечно, просто присвойте перечислению имя:

enum Baz
{
    FOO, BAR;
}

И затем вы можете переключать выражения типа Baz:

    switch (baz)
    {
    case FOO:
        {

        }
        break;

    case BAR:
        {

        }
        break;
    }

Вы все равно можете связать FOOи BAR со значениями 1 и 9, если вы хотите:

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

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

    public final int value;
}

Тогда вы можете сказать baz.value, чтобы получить соответствующее значение.

0 голосов
/ 09 декабря 2010

просто создайте перечисление xDD

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

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