在Java中使用int值的枚举

时间:2009-11-05 16:52:28

标签: c# java enums

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编译器知道在各种情况下处理的方式略有不同。因此,如果你想要它们中的数据,你似乎需要有一个数据的实例变量和一个合适的构造函数。