2013-11-01 78 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