Java 使用枚举作为int值

Java 使用枚举作为int值,java,enums,enumeration,Java,Enums,Enumeration,我正在尝试使用枚举作为常量,以提高可读性,如下所示 Public enum x { test1 , test2 , test3 } 我想将此枚举传递到一个方法中,并将其用作int值,如图所示 private void (int type) { switch(int) { case enum.X: // do somthing break; } } ; 我们可以在这里使用enum,因为它比使用int值更清晰(如开关1等)。

我正在尝试使用枚举作为常量,以提高可读性,如下所示

Public enum x { test1 , test2 , test3 }
我想将此枚举传递到一个方法中,并将其用作int值,如图所示

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

我们可以在这里使用enum,因为它比使用int值更清晰(如开关1等)。可以这样使用吗?

是的,您应该能够在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类中一样在枚举上拥有字段/方法,并且可以像在任何其他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())
将打印
2
,而
System.out.println(AnotherEnum.五十七.getFrench())
将打印
cinquante-sept

是的,您应该能够在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类中一样在枚举上拥有字段/方法,并且可以像在任何其他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())
将打印
2
,而
System.out.println(AnotherEnum.五十七.getFrench())
将打印
cinquante sept
不,你不能说:

case Enumerator.ordinal():
但你可以说:

switch(EnumObject.values()[intVar]) {
  case Enumerator1:
       ...
}
不,你不能说:

case Enumerator.ordinal():
但你可以说:

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

另一种方法是对枚举类做更多的工作

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;
    }

另一种方法是对枚举类做更多的工作

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;
    }

enum.X没有任何意义。不过,枚举只是抽象掉的整数。test1=0、test2=1和test3=2。您可以互换地使用枚举及其整数表示。这在C#中是正确的,但在Java中不是!不,他们不是。它们是实例具有关联int(枚举的序号)的类。您可以在它们上定义方法,创建非默认构造函数,等等。我现在很困惑。为什么需要int?无论如何,如果您有一个强制转换到枚举,那么在开关中使用它。如果您需要int,请使用int,而不是enum。这不是C,它们不能互换,也不能以相同的方式工作。Java枚举实际上是类,而不是原语。不过,枚举只是抽象掉的整数。test1=0、test2=1和test3=2。您可以互换地使用枚举及其整数表示。这在C#中是正确的,但在Java中不是!不,他们不是。它们是实例具有关联int(枚举的序号)的类。您可以在它们上定义方法,创建非默认构造函数,等等。我现在很困惑。为什么需要int?无论如何,如果您有一个强制转换到枚举,那么在开关中使用它。如果您需要int,请使用int,而不是enum。这不是C,它们不能互换,也不能以相同的方式工作。Java枚举实际上是类,而不是原语。但是它是如何工作的呢?getSomeInt for Two如何返回2。我是第一次使用enum,所以想知道更多关于这方面的信息。我不确定我是否理解你的“它是如何工作的”问题,所以我扩展了示例,希望能让事情变得更清楚。哦,很好,我可以使用上述方法。但是它是如何工作的呢?getSomeInt for Two如何返回2。我是第一次使用enum,所以想知道更多关于这方面的信息。我不确定我是否理解你的“它是如何工作的”问题,所以我扩展了示例,希望能更清楚地说明发生了什么。这不会编译-
case
语句中的表达式必须是常量,因此不能是方法调用的结果。这不会编译-
case
语句中的表达式必须是常量,因此不能是方法调用的结果。