2013-05-09 44 views
0

我設計了一個通用的方法,來讀取枚舉值/寫設置爲BigInteger的在數組中的枚舉enumConstants中的位置,是否對應於枚舉的序數值?

我原來的執行

public static <T extends Enum<T>> Set<T> asList(BigInteger integer, Class<T> targetClass) { 
    Set<T> enums = new HashSet<T>(); 
    // Step 0. Sanity check 
    if (targetClass == null || integer == null || !targetClass.isEnum()) 
     return enums; 
    // Step 1. Checking each value of target class 
    T[] values = targetClass.getEnumConstants(); 
    for (int i = 0; i < values.length; i++) { 
     if (integer.testBit(i)) 
      enums.add(values[i]); 
    } 
    // Step 3. Returning final enums 
    return enums; 
} 

不過,我切換到:

public static <T extends Enum<T>> Set<T> asSet(BigInteger integer, Class<T> targetClass) { 
    Set<T> enums = new HashSet<T>(); 
    // Step 0. Sanity check 
    if (targetClass == null || integer == null || !targetClass.isEnum()) 
     return enums; 
    // Step 1. Checking each value of target class 
    T[] values = targetClass.getEnumConstants(); 
    for (int i = 0; i < values.length; i++) { 
     T value = values[i]; 
     if (integer.testBit(value.ordinal())) 
      enums.add(value); 
    } 
    // Step 3. Returning final enums 
    return enums; 
} 

我這樣做由於Enum在文檔中的描述:

* Returns the ordinal of this enumeration constant (its position 
* in its enum declaration, where the initial constant is assigned 
* an ordinal of zero). 

所以基本上,第一個值可能不總是0.

在哪些情況下,或者哪些JVM的枚舉初始值不是0?

+1

你如何從「初始常量分配零序數」到「初始值可能不總是0」? – 2013-05-09 05:55:30

+0

誤讀它。現在我看到了我的錯誤。 – mavarazy 2013-05-12 05:49:21

回答

2

你說So basically, first value might not always be 0.你是如何得出這個結論的?

第一枚枚舉常量的序數總是0.當然,如果您更改順序或添加新常量,它將會改變爲相同的元素。這就是爲什麼這是一個壞主意。

+0

謝謝,我誤解了文檔。我讀零或零,我的壞。 – mavarazy 2013-05-12 05:48:53