使用Enum作为int值

时间:2013-11-01 00:20:09

标签: java enums enumeration

我尝试使用Enum作为常量以获得可读性,如下所示。

Public enum x { test1 , test2 , test3 }

我想将此枚举传递给方法并将其用作int值,如图所示

private void (int type)
{ 
  switch(int) 
  {
    case enum.X:
          // do somthing 
           break;
   }
 } ;

我们可以在这里使用枚举,因为它比使用int值更清晰。(如switch 1等)。是否可以这样使用。?

3 个答案:

答案 0 :(得分:4)

是的,您应该能够在Java中的switch语句中使用枚举:

public enum SomeEnum { FOO, BAR, BAZ };

// in a class...
private void something(SomeEnum s) {
    switch (s) {
        case FOO:
            // do something
            break;
        case BAR:
            // do something else
            break;
    }
}

不确定我是否理解int值如何与此相关联,但是您可以在枚举中使用字段/方法,就像在普通的Java类中一样,并且可以使用这些来保存int(或任何其他类型)值,就像在任何其他POJO上一样

这是一个我们为枚举类声明构造函数的示例,以便您可以在构造枚举的每个实例时传入内部变量的值。为了帮助您了解正在发生的事情:首先我们在枚举中声明项目 - 每个声明都调用构造函数,因此我们可以在这里传递实例变量。然后是枚举类的代码,就像普通的Java类一样。

public enum AnotherEnum {
    ONE(1, "un"), TWO(2, "deux"), THREE(3, "trois"), FIFTY_SEVEN(57, "cinquante-sept");

    private final int someInt;
    private final String french;
    private AnotherEnum(int i, String s) {
        this.someInt = i;
        this.french = s;
    }
    public int getSomeInt() {
        return this.someInt;
    }
    public String getFrench() {
        return this.french;
    }
}

例如,System.out.println(AnotherEnum.TWO.getSomeInt())会打印2System.out.println(AnotherEnum.FIFTY_SEVEN.getFrench())会打印cinquante-sept

答案 1 :(得分:0)

不,你不能说:

case Enumerator.ordinal():

但你可以说:

switch(EnumObject.values()[intVar]) {
  case Enumerator1:
       ...
}

答案 2 :(得分:0)

另一种方法是你可以通过多做一些枚举类来完成这项工作。

public enum Foo {
   X (1),
   Y (2);

   private int value;

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

现在你需要做的就是:

    switch (int)
    {
        case Foo.X: doSomething ();break;
        case Foo.Y: doSomething ();break;
    }