2011-12-03 39 views
0

我應該從一個變量枚舉它的值並將其轉換爲string.how可以嗎?取enum的值並將其轉換爲字符串

在這裏它是類型枚舉:

public enum State{ 
     b,c,p; 

}; 

現在我要插入的對象的字符串的一個值。

+4

enum有辦法做到這一點。你會想檢查API。 –

+0

我還沒找到它,我發現值() – Mazzy

回答

2

您可以使用enum.nameenum.toString來獲取枚舉常量的名稱,或使用enum.ordinal來獲取序號位置。

2

你可以使用名稱()或toString()方法,所以:

State aState = State.c; 
String strState = aState.name(); 

here更多信息,官方Java參考...

2

State.b.toString()將返回"b"。其他人也一樣。

2

通常,

State state = ...; 
String string = state.toString(); 

應該工作,但不推薦,因爲有人可能會覆蓋toString用於其他目的。

相反,你要尋找的方法是

String string = state.name(); 

順便說一句,你列舉規定應始終都在首都,他們應該有描述性的名字。這不是一種語言規則,而是一種慣例。例如enum State { ON, OFF, PAUSED; }

1

方法1:使用內置的toString()name()方法

如果你要打印String是一樣的State的價值,那麼你可以使用toString()方法,或方法。

System.out.println(State.b); // Prints "b" 
System.out.println(State.c); // Prints "c" 
System.out.println(State.p); // Prints "p" 

方法2:使用構造函數來創建一個自定義映射

如果你想與上述兩個國家的相關自定義String,你可以用一個構造函數爲特定值相關聯每個enum值:

public enum State{ 
    b("State B"), c("State C"), p("State P"); 

    private String longName; 
    private State(String longName) { 
     this.longName = longName; 
    } 
    @Override 
    public String toString() { 
     return this.longName; 
    } 
}; 

當然,如果你不想打破默認toString()使用情況,您可以創建一個不同的方法稱爲例如,返回自定義值。

+0

只有一個'@Override public String toString {return「State」+ name()。toUpperCase(); }',你可以在聲明'a,c,p;'之後放置它。 – toto2

+0

你說的沒錯,但是我使用'State B'等作爲示例字符串。例如,有人可能想將'b'映射到''Banana''和'c''''' Coconut'',在這種情況下,沒有堅實而快速的方法來實現'toString()'邏輯。 –

1

我傾向於做更復雜的東西,但我覺得它更靈活:

public enum MyEnumeration { 
    SOME_NAME("Some Name"), 
    OTHER_THING("Other Thing"), 
    ... 
    MORE_VALUES("More Values"), 

    private final String displayName; 

    private MyEnumeration(String displayName) { 
     this.displayName = displayName; 
    } 

    public String getDisplayName() { 
     return displayName; 
    } 
} 

這樣一來,我採用規範的爲我的代碼枚舉,但可以對他們有一個更像樣的名字。 這個技巧也可以用來代替序數,通過初始化一個數字,然後你不必擔心重新排列你的枚舉。

相關問題