C#的Java等价物是什么:
enum Foo
{
Bar = 0,
Baz = 1,
Fii = 10,
}
5 个答案:
答案 0 :(得分:81)
如果您需要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
只是创建类的快捷方式,因此您可以向类中添加所需的任何属性和方法。
如果您不想在enum
上定义任何方法,可以更改成员变量的范围并使其成为public
,但这不是他们在{{3}中所做的事情}。
答案 1 :(得分:15)
如果你有一个连续的值范围,而你只需要整数值,你可以最小化地声明枚举:
public enum NUMBERZ {
ZERO, ONE, TWO
}
然后获取int值如下:
int numberOne = NUMBERZ.ONE.ordinal();
但是,如果你需要一个不连续的范围(如你的例子,你从1跳到10)那么你需要编写自己的枚举构造函数来设置你自己的成员变量,并为该变量提供一个get方法,如其他答案中所述。
答案 2 :(得分:4)
是:
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')
获取值栏
答案 3 :(得分:2)
听起来你想要这样的东西:
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 Tutorial将是一个了解更多信息的好地方。
答案 4 :(得分:0)
public enum Foo {
Bar(0),
Baz(1),
Fii(10);
private final int someint;
Foo(int someint) {
this.someint = someint;
}
}
在Java中,枚举与其他类非常相似,但Java编译器知道在各种情况下处理的方式略有不同。因此,如果你想要它们中的数据,你似乎需要有一个数据的实例变量和一个合适的构造函数