2013-11-01 91 views
0

我试图使用Enum作为常量的可读性如下。使用枚举作为一个int值

Public enum x { test1 , test2 , test3 } 

我想这个枚举传递到一个方法,并用它作为一个int值,如图

private void (int type) 
{ 
    switch(int) 
    { 
    case enum.X: 
      // do somthing 
      break; 
    } 
} ; 

我们可以使用枚举这里作为其更清晰的比使用int值。(如开关1等)。有没有可能使用这种方式。?

+0

enum.X并不意味着什么。虽然枚举只是被抽象出来的整数。 test1 = 0,test2 = 1,test3 = 2。您可以互换使用枚举和它们的整数表示。 –

+0

这在C#中是正确的,但不是在Java中! – pobrelkey

+1

不,他们不是。它们是实例具有关联的int(枚举的序数)的类。你可以在它们上定义方法,创建非默认构造函数等。 – yshavit

回答

4

是的,你应该能够在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(或任何其他类型)值。

下面是一个例子,我们为一个枚举类声明一个构造函数,以便您可以在构造枚举的每个实例时传入内部变量的值。为了帮助您了解正在发生的事情:首先我们在枚举中声明这些项 - 每个声明调用构造函数,所以我们可以在这里传入实例变量。然后,像普通的Java类那样,enum类的代码如下所示。

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())将打印2System.out.println(AnotherEnum.FIFTY_SEVEN.getFrench())将打印cinquante-sept

+0

哦,不错,我可以用上面说的方式。但它是如何工作的getSomeInt for two返回2。我第一次使用枚举,所以想要知道更多关于这个 – Suraj

+0

不知道我理解你的“它是如何工作”的问题,所以我扩展了这个例子,希望能够让事情更清晰。 – pobrelkey

0

不,你不能说:

case Enumerator.ordinal(): 

但你可能会说:

switch(EnumObject.values()[intVar]) { 
    case Enumerator1: 
     ... 
} 
0

的另一种方式,你可以做你多一点的工作枚举类做到这一点。

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; 
    } 
+1

这不会编译 - case语句中的表达式必须是常量,因此不能是方法调用的结果。 – pobrelkey