0

我正在尝试使用 Enum 作为常量来提高可读性,如下所示。

Public enum x { test1 , test2 , test3 }

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

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

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

4

3 回答 3

4

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

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 类中一样在枚举上拥有字段/方法,并且可以像在任何其他 POJO 上一样使用它们来保存 int (或任何其他类型)值。

这是一个示例,其中我们为枚举类声明了一个构造函数,以便您可以在构造枚举的每个实例时传入内部变量的值。为了帮助您了解正在发生的事情:首先我们在枚举中声明项目 - 每个声明都会调用构造函数,因此我们可以在此处传递实例变量。然后是 enum 类的代码,就像普通的 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())将 print2System.out.println(AnotherEnum.FIFTY_SEVEN.getFrench())print cinquante-sept

于 2013-11-01T00:43:09.333 回答
0

不,你不能说:

case Enumerator.ordinal():

但你可以说:

switch(EnumObject.values()[intVar]) {
  case Enumerator1:
       ...
}
于 2013-11-01T00:46:55.373 回答
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;
    }
于 2013-11-01T01:20:43.603 回答