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
语句中的表达式必须是常量,因此不能是方法调用的结果。