用Java中的int值枚举

什么是C#的Java相当于:

enum Foo { Bar = 0, Baz = 1, Fii = 10, } 

如果你想为你的enum属性,你需要像这样定义它:

 public enum Foo { BAR (0), BAZ (1), FII (10); private final int index; Foo(int index) { this.index = index; } public int index() { return index; } } 

你会这样使用它:

 public static void main(String[] args) { for (Foo f : Foo.values()) { System.out.printf("%s has index %d%n", f, f.index()); } } 

要认识到的是, enum只是创build一个类的一个捷径,所以你可以添加你想要的类的任何属性和方法。

如果你不想在你的enum上定义任何方法,你可以改变成员variables的范围并public它们,但这不是在Sun网站上的例子 。

如果你有一个连续的值范围,并且你所需要的只是整数值,那么你可以简单的声明这个枚举:

 public enum NUMBERZ { ZERO, ONE, TWO } 

然后获得如下的int值:

 int numberOne = NUMBERZ.ONE.ordinal(); 

然而,如果你需要一个不连续的范围(如你的例子中,从1跳到10),那么你将需要编写你自己的枚举构造函数来设置你自己的成员variables,并为该variables提供一个get方法在这里的其他答案。

它是:

 enum Foo { Bar(0), Baz(1), Fii(10); private int index; private Foo(int index) { this.index = index; } } 

请注意,要从索引中获取枚举的值, Foo.valueOf(1) (*)将不起作用。 你需要自己编码:

 public Foo getFooFromIndex(int index) { switch (index) { case 0: return Foo.Bar; case 1: return Foo.Baz; case 10: return Foo.Fii; default: throw new RuntimeException("Unknown index:" + index); } } 

(*):Enum.valueOf()从String返回枚举。 因此,您可以通过Foo.valueOf('Bar')获得Bar的值

听起来像你想要这样的事情:

 public enum Foo { Bar(0), Baz(1), Fii(10); private int number; public Foo(int number) { this.number = number; } public int getNumber() { return number; } } 

对于初学者来说,Sun的Java Enum教程将是了解更多信息的好地方。

 public enum Foo { Bar(0), Baz(1), Fii(10); private final int someint; Foo(int someint) { this.someint = someint; } } 

在Java中,枚举与其他类非常相似,但Java编译器知道在各种情况下处理方式稍有不同。 所以,如果你想在他们的数据像你似乎你需要有一个实例variables的数据和适当的构造函数。