【发布时间】:2010-12-13 12:14:45
【问题描述】:
C# 的 Java 等价物是什么:
enum Foo
{
Bar = 0,
Baz = 1,
Fii = 10,
}
【问题讨论】:
-
我对 Java 感到尴尬的是,具有不同 int 值的枚举不仅可以工作。
C# 的 Java 等价物是什么:
enum Foo
{
Bar = 0,
Baz = 1,
Fii = 10,
}
【问题讨论】:
如果你有一个连续的值范围,而你只需要整数值,你可以至少声明枚举:
public enum NUMBERZ {
ZERO, ONE, TWO
}
然后获取int值如下:
int numberOne = NUMBERZ.ONE.ordinal();
但是,如果您需要一个不连续的范围(如在您的示例中,您从 1 跳转到 10),那么您将需要编写自己的枚举构造函数来设置您自己的成员变量,并为该变量提供一个 get 方法,如此处其他答案中所述。
【讨论】:
public enum Foo {
Bar(0),
Baz(1),
Fii(10);
private final int someint;
Foo(int someint) {
this.someint = someint;
}
}
在 Java 中,枚举与其他类非常相似,但 Java 编译器知道在各种情况下会有所不同。因此,如果您想要其中的数据,就像您认为的那样,您需要有一个数据的实例变量和一个适当的构造函数。
【讨论】:
如果你想要 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,但这不是他们在 example on the Sun website 中所做的。
【讨论】:
它是:
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() 从字符串返回枚举。因此,您可以通过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 Tutorial 将是了解更多信息的好地方。
【讨论】: