2012-05-19 244 views
7

我有枚舉這樣Java自定義枚舉值枚舉

public enum Sizes { 
    Normal(232), Large(455); 

    private final int _value; 

    Sizes(int value) { 
     _value = value; 
    } 

    public int Value() { 
     return _value; 
    } 
} 

現在我可以調用Sizes.Normal.Value()獲取整數值,但我怎麼轉換整數值回枚舉?

我現在要做的是:

public Sizes ToSize(int value) { 
    for (Sizes size : Sizes.values()) { 
     if (size.Value() == value) 
      return size; 
    } 
    return null; 
} 

但這只是做到這一點呢?這就是Java的工作原理?

+1

[Java枚舉反向查找最佳實踐]可能的重複(http://stackoverflow.com/questions/5316311/java-enum-reverse-look-up-best-practice) – bmargulies

回答

8

是的,這是如何完成的,通常通過向枚舉中添加靜態方法。想想看,你可以在枚舉上有10個字段。你期望Java爲它們設置查找嗎?

這裏的要點是Java枚舉沒有'值'。他們有身份和序數,加上你自己添加的任何東西。這與C#完全不同,後者在C++中使用任意整數值。

+2

我試圖把一個靜態HashMap放入他的枚舉中,但看起來你不能從enum構造函數中填充它。 1 + –

+0

以及我仍然喜歡C#如何處理枚舉。它快得多。枚舉假設是一個整數標識符,而不是整個類:) – xmen

+0

您可能需要在靜態塊中初始化它。靜態私有HashMap map = new HashMap ;然後做放入ctor? – bmargulies

1

自從我上次使用Java之後已經有一段時間了,但是如果我沒有記錯,_value字段和枚舉的序號之間沒有關係。例如,AFAIK可以有兩個條目,例如_value。正如@bmargulies指出的那樣,你可以在枚舉中有許多字段,並且沒有什麼限制你爲每個(或全部)使用不同的值。請參閱this related question。顯然,你不能直接設置條目的序號。

+0

多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成在多數民衆贊成,這就是爲什麼我問,它就像使用C++ lol一樣工作 – xmen